用逻辑备份搭从库
小数据量下最简路径是:用 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,防止误写入
- 观察延迟曲线稳定回落后,再把新从库加入监控与备份体系
- 记录本次重建耗时,作为下次在逻辑与物理备份之间做选择的依据