主题
使用 XtraBackup 对 MySQL 5.7 主库进行在线热备并恢复至从库,是生产环境中搭建或重建主从复制的标准方案。由于使用的是 MySQL 5.7,对应的工具版本应为 XtraBackup 2.4。
一、备份前准备工作
在开始之前,请确保满足以下前置条件:
- 主库的
binlog_format必须设置为ROW。 - 主库与从库的
server_id不能冲突。 - 从库磁盘剩余空间需大于主库数据目录实际占用的 1.5 倍(Prepare 阶段会有临时膨胀)。
二、在主库执行全量备份
在主库服务器上执行物理热备命令。为了后续恢复方便,建议加上 --slave-info 参数记录位点信息:
bash
xtrabackup --backup \
--user=root \
--password=你的密码 \
--target-dir=/home/backup/xtrabackup/full_$(date +%F) \
--slave-info \
--lock-ddl-per-table \
--socket=/tmp/mysql.sock备份完成后,会在目标目录下生成包含同步位点的文件 xtrabackup_binlog_info 或 xtrabackup_slave_info。
bash
xtrabackup: Starting InnoDB instance for recovery.
...
260612 16:52:39 completed OK!三、传输备份文件到从库
bash
scp -r /home/backup/xtrabackup/full_2026-06-12 root@从库IP:/home/backup/四、在从库执行 Prepare(日志应用)
备份的文件不能直接启动,必须先回放 Redo Log 并回滚未提交的事务,使其达到一致性状态:
bash
xtrabackup --prepare --apply-log-only --target-dir=/home/backup/full_2026-06-12五、清空从库旧数据并恢复
- 停止从库 MySQL 服务。
- 清空从库原有的数据目录(操作前务必备份原有 data 目录):
bash
rm -rf /home/application/mysql/data/*- 将处理好的备份文件恢复到从库数据目录:
bash
xtrabackup --copy-back --target-dir=/home/backup/full_2026-06-12- 修改目录权限(极其重要,否则 MySQL 无法启动):
bash
chown -R mysql:mysql /home/application/mysql/data- 启动从库 MySQL 服务。
六、配置并开启主从同步
- 查看备份时记录的 Binlog 位点信息:
bash
cat /home/backup/full_2026-06-12/xtrabackup_binlog_info
# 输出示例: mysql-bin.000051 154- 登录从库 MySQL,配置主从关系并指定准确的位点:
bash
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_PORT=3306,
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='mysql-bin.000051',
MASTER_LOG_POS=154;- 启动复制线程并检查状态:
bash
START SLAVE;
SHOW SLAVE STATUS\G;确保输出结果中 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes,且 Seconds_Behind_Master 逐步减少直至为 0,即表示主从同步搭建成功。
