怎么使用 mysqldump 配合 change master 构建新从库

文章导读
使用 mysqldump 配合 CHANGE MASTER 构建新从库,核心是通过 `--master-data` 参数在备份文件中记录主库 binlog 位置,恢复数据后执行 CHANGE MASTER 命令指向该位置。该方法适合数据量中等、允许逻辑备份搭建从库或重建复制关系的场景,不适用于 TB 级大库。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

使用 mysqldump 配合 CHANGE MASTER 构建新从库,核心是通过 `--master-data` 参数在备份文件中记录主库 binlog 位置,恢复数据后执行 CHANGE MASTER 命令指向该位置。该方法适合数据量中等、允许逻辑备份搭建从库或重建复制关系的场景,不适用于 TB 级大库。

先说结论:mysqldump 导出带 binlog 位置的一致性备份,从库恢复后执行 CHANGE MASTER 指向该位置即可启动复制。

  • 适合:主库数据量在几十 GB 以内,需逻辑备份搭建从库或重建复制关系的场景
  • 先准备:确认主从 server_id 唯一,主库开启 binlog,创建复制账号
  • 验收:SHOW SLAVE STATUS 中 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes

命令速用版

主库备份命令(记录 binlog 位置):

mysqldump -u root -p `--single-transaction` `--master-data`=2 `--all-databases` > backup.sql

从库配置复制命令:

CHANGE MASTER TO MASTER_HOST='主库 IP', MASTER_USER='repl', MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123456;

为什么会这样

mysqldump 的 `--master-data` 参数会在备份文件中写入主库当时的 binlog 文件名和位置点。

恢复数据后,从库数据状态与主库备份时刻一致,通过 CHANGE MASTER 指定该位置,从库即可从该点继续拉取 binlog 进行增量同步。若不使用该参数,需手动 SHOW MASTER STATUS 记录位置,容易因时间差导致数据不一致。

怎么使用 mysqldump 配合 change master 构建新从库

分步处理

1. 主库创建复制账号并授权:

CREATE USER 'repl'@'%' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

2. 主库执行备份,添加 `--single-transaction` 保证 InnoDB 一致性:

mysqldump -u root -p `--single-transaction` `--master-data`=2 `--all-databases` > backup.sql

3. 从库导入备份文件:

mysql -u root -p < backup.sql

4. 从库配置主库连接信息,若备份文件中含 CHANGE MASTER 语句(`--master-data`=1)可直接执行,若为注释(`--master-data`=2)需手动提取参数执行:

怎么使用 mysqldump 配合 change master 构建新从库
CHANGE MASTER TO MASTER_HOST='主库 IP', MASTER_USER='repl', MASTER_LOG_FILE='binlog 文件名', MASTER_LOG_POS=位置点;

5. 启动从库复制:

START SLAVE;

怎么验证是否生效

在从库执行 SHOW SLAVE STATUS\G,检查以下字段:

  • Slave_IO_Running: Yes(表示连接主库正常)
  • Slave_SQL_Running: Yes(表示 sql 线程执行正常)
  • Seconds_Behind_Master: 0 或较小数值(表示延迟低)

常见坑

1. GTID 模式冲突:若主库开启 GTID,从库导入备份前需执行 RESET MASTER 清除已有 GTID,否则报错 GTID_SET 重叠。

2. server_id 重复:主从库 server_id 必须唯一,否则复制无法启动。

3. 权限不足:复制账号需具备 REPLICATION SLAVE 权限,否则 IO 线程无法连接。

怎么使用 mysqldump 配合 change master 构建新从库

4. 大库性能:mysqldump 是逻辑备份,数据量大时恢复慢且占用主库资源,有运维建议主库在 50G 左右以内使用此方法,TB 级数据建议用物理备份工具。

常见问题

`--master-data`=1 和 2 有什么区别?

=1 会在备份文件中生成可执行的 CHANGE MASTER 语句,=2 生成被注释的语句,建议用 2 防止误执行。

从库导入报错 GTID_PURGED 无法修改怎么办?

在从库导入前执行 RESET MASTER 清除现有 GTID 执行集,再导入备份。

重建从库需要停主库服务吗?

不需要,使用 `--single-transaction` 参数可在不加锁的情况下获取一致性备份,但主库仍有 IO 压力。

参考来源

  • mysql 如何重建从库
  • MySQL 运维 30-基于主库搭建从库_mysqldump 搭建从库-CSDN 博客
  • mysql 利用 mysqldump 方式搭建主从
  • MySQL 复制从库建立-mysqldump 方式
  • mysql 通过 mysqldump 命令重做从库详细操作步骤 - penngke - 博客园