首页/数据/数据库速查/用 mysqldump 建从库(小库实操)
主从复制与高可用53 条

用 mysqldump 建从库(小库实操)

小数据量最简路径:mysqldump --source-data=2 导出一致性快照+位点 → 新实例导入 → 按注释里的位点(或 GTID)配置复制。

数据库速查数据更新于 2026-10-13

用逻辑备份搭从库

小数据量下最简路径是:用 mysqldump 的 --single-transaction 加位点选项导出一致性快照,产物头部会写清 binlog 文件名与位点(或 GTID 集合);新实例导入后按这些信息配置复制源并启动。它的优点是跨版本可用、步骤少;缺点是数据量大时导入耗时远超物理备份。

基本信息

适用MySQL 5.7 / 8.0,数据量中小规模(几十 GB 以内)
关键选项--single-transaction 一致性快照,--source-data=2(8.0.26+)/ --master-data=2(5.7)
对象完整性--routines --events --triggers 建议同时带上
GTID需 --set-gtid-purged=ON 才能用 AUTO_POSITION 起复

导出与导入

导出与导入
# 源端导出:一致性快照 + 位点注释(8.0 用 --source-data,5.7 用 --master-data)
mysqldump -uroot -p --single-transaction --source-data=2 --all-databases --routines --events > /data/backup/for_replica.sql
# 检查产物头部的位点注释,确认快照点已被记录
grep -n "CHANGE REPLICATION SOURCE\|CHANGE MASTER" /data/backup/for_replica.sql | head
# 新实例导入:期间必须阻止应用写入,否则位点被污染
mysql -uroot -p < /data/backup/for_replica.sql
# 导入完成后核对库表数量与关键表行数,再进入配置复制步骤

配置复制

配置复制
-- GTID 环境(推荐):起点由 GTID 集合决定,无需记文件位点
CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.10', SOURCE_USER='repl', SOURCE_PASSWORD='***', SOURCE_AUTO_POSITION=1;
-- 位点方式:用产物注释里读到的 File 与 Position
CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.10', SOURCE_USER='repl', SOURCE_PASSWORD='***', SOURCE_LOG_FILE='mysql-bin.000045', SOURCE_LOG_POS=12345678;
START REPLICA;                              # 5.7 语法为 START SLAVE;
SHOW REPLICA STATUS\G                       # 确认 IO 与 SQL 线程均为 Yes,且无 Last_*_Error

典型使用场景

  • 给测试环境补一个与生产同构的从库,数据量不大时最省事
  • 主从断链且 binlog 已丢的应急重建,从备份重做从库
  • 跨小版本搭建只读节点,用作报表与压测分流
  • 演练恢复流程:验证备份产物真的能起一个可复制的新实例
  • 迁移到新机房时,用逻辑备份加复制做平滑切换
dump 头部会带 SET @@GLOBAL.GTID_PURGED 语句(取决于 --set-gtid-purged 取值),导入后 GTID 起点自动就位,这也是 GTID 环境最省心的重建方式。
导入过程中若应用连上新实例产生写入,快照位点就被污染,复制起点错乱后极难定位,务必在导入完成前隔离新实例的写入入口。

起复后的验证要点

  • 核对从库 server_id 与主库不同,重复的编号会让复制行为异常
  • 抽查关键表行数与主库比对,确认快照导入完整无损
  • 确认从库已开启 read_only 或 super_read_only,防止误写入
  • 观察延迟曲线稳定回落后,再把新从库加入监控与备份体系
  • 记录本次重建耗时,作为下次在逻辑与物理备份之间做选择的依据

易错点

  • 导入期间新实例被应用写入:位点被污染,后续复制报重复键或数据不一致
  • GTID 环境却用 --set-gtid-purged=OFF 导出:AUTO_POSITION 找不到起点,起复直接失败
  • 忘记 --single-transaction:导出期间锁表或快照不一致,从库数据与位点对不上
  • 用 5.7 语法在 8.0 上起复:CHANGE MASTER 与 --master-data 在新版本已改名,按版本选对写法

数据来源与参考

  • MySQL 8.0 Reference Manual: mysqldump --source-data
  • MySQL 8.0 Reference Manual: Setting Up Replication

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌