使用 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 记录位置,容易因时间差导致数据不一致。
分步处理
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.sql3. 从库导入备份文件:
mysql -u root -p < backup.sql4. 从库配置主库连接信息,若备份文件中含 CHANGE MASTER 语句(`--master-data`=1)可直接执行,若为注释(`--master-data`=2)需手动提取参数执行:
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 线程无法连接。
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 - 博客园