首页/数据/数据库速查/建从库:一致性快照与位点获取
主从复制与高可用53 条

建从库:一致性快照与位点获取

建从库第一步:在主库拿到「一致性快照 + 对应位点」。经典做法 FTWRL 锁写 → 记位点 → 导数据/拍快照 → 解锁,保证快照与位点匹配。

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

为什么要先拿一致快照与位点

从库要从主库的某一个精确时刻开始重放,所以建从库的第一步是同时取得两样东西:一份该时刻的一致性数据快照,和与之对应的 binlog 位点或 GTID 集合。顺序错了就出事:先导数据后记位点会漏掉中间产生的变更,先记位点后导数据则可能重复应用,两种情况都需要重新搭一遍。

基本信息

适用平台MySQL 5.7 / 8.0 传统主从复制
经典做法FLUSH TABLES WITH READ LOCK 锁写后取位点再导出
取位点命令SHOW MASTER STATUS(8.0.22+ 为 SHOW BINARY LOG STATUS)
GTID 环境记录 @@GLOBAL.gtid_executed 与 gtid_purged
自动方案mysqldump --source-data=2、XtraBackup 均自带位点

典型使用场景

  • 新上线一台从库,需要与主库对齐后再开始复制
  • 故障后重建损坏的从库,避免长时间追赶 binlog
  • 扩容读副本用于分摊查询压力
  • 迁移到新机房:先在新环境搭从库,再切换流量
  • 演练恢复流程:验证从零搭建从库所需时间

经典流程(会话 A 加锁,会话 B 取位点)

经典流程(会话 A 加锁,会话 B 取位点)
-- 会话 A:加全局读锁,阻塞写入
FLUSH TABLES WITH READ LOCK;
-- 会话 B:在同一窗口内记录位点
SHOW BINARY LOG STATUS;      -- 8.0.22+;旧版本用 SHOW MASTER STATUS
-- 记下 File: mysql-bin.000045 与 Position: 12345678
-- 该窗口内用 mysqldump 导出或 XtraBackup 拍快照
-- 回到会话 A:解除锁定
UNLOCK TABLES;

GTID 环境与工具自带位点

GTID 环境与工具自带位点
# GTID 模式:记录已执行集合,恢复后设置 gtid_purged
mysql -e "SELECT @@GLOBAL.gtid_executed"
# mysqldump 直接把位点写进导出文件头部
mysqldump -uroot -p --single-transaction --source-data=2 --all-databases > all.sql
head -30 all.sql | grep -E 'CHANGE REPLICATION SOURCE|GTID_PURGED'
# XtraBackup 在备份目录内记录位点
cat /data/backup/xtra_2026-10-12/xtrabackup_binlog_info

位点获取方式对比

方式锁写时长适用场景
FTWRL 手工取位点需短暂全局锁写传统流程,非 InnoDB 表也一致
mysqldump --source-data=2仅 InnoDB 走一致性快照小中型库,导出即带位点
XtraBackup备份过程不阻塞写入大库、要求恢复快
Clone Plugin实例级克隆(8.0.17+)新副本快速对齐,减少手工步骤
并行导出工具与快照类备份能把位点写在产物里,比手工记忆更不容易出错;使用前先确认版本是否支持 source-data 这类新参数名。
FTWRL 会阻塞全部写入,业务高峰执行会直接造成写入积压。窗口要尽量短:先在另一个会话准备好导出脚本,取完位点立刻解锁。

易错点

  • 先导数据后记位点:快照与位点错位,从库起来后数据出现缺口,而且缺口不易被发现
  • 忘记 UNLOCK TABLES:主库写入全部阻塞,值班时容易误判为实例故障
  • 用 --single-transaction 却混用 MyISAM 等非事务表:这些表在导出期间不受一致性快照保护,需要单独加锁处理
  • GTID 环境只记录坐标位点:切换或重建时需要的是 gtid_executed,两者混用会导致从库无法定位起始点

数据来源与参考

  • MySQL 8.0 Reference Manual: Creating a Replication User and Snapshot

相关工具

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