Skip to content

使用 XtraBackup 对 MySQL 5.7 主库进行在线热备并恢复至从库,是生产环境中搭建或重建主从复制的标准方案。由于使用的是 MySQL 5.7,对应的工具版本应为 XtraBackup 2.4

一、备份前准备工作

在开始之前,请确保满足以下前置条件:

  1. 主库的 binlog_format 必须设置为 ROW
  2. 主库与从库的 server_id 不能冲突。
  3. 从库磁盘剩余空间需大于主库数据目录实际占用的 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_infoxtrabackup_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

五、清空从库旧数据并恢复

  1. 停止从库 MySQL 服务。
  2. 清空从库原有的数据目录(操作前务必备份原有 data 目录):
bash
rm -rf /home/application/mysql/data/*
  1. 将处理好的备份文件恢复到从库数据目录:
bash
xtrabackup --copy-back --target-dir=/home/backup/full_2026-06-12
  1. 修改目录权限(极其重要,否则 MySQL 无法启动):
bash
chown -R mysql:mysql /home/application/mysql/data
  1. 启动从库 MySQL 服务。

六、配置并开启主从同步

  1. 查看备份时记录的 Binlog 位点信息:
bash
cat /home/backup/full_2026-06-12/xtrabackup_binlog_info
# 输出示例: mysql-bin.000051    154
  1. 登录从库 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;
  1. 启动复制线程并检查状态:
bash
START SLAVE;
SHOW SLAVE STATUS\G;

确保输出结果中 Slave_IO_RunningSlave_SQL_Running 均为 Yes,且 Seconds_Behind_Master 逐步减少直至为 0,即表示主从同步搭建成功。

最近更新