新节点加不进去因未清空旧复制元数据,需先执行 reset slave all 再配置 change replication source to 并设 source_auto_position=1 或精确日志位置;主从 gtid 模式必须一致;mysqldump 需加 --single-transaction --master-data=2 确保 gtid 一致;扩容延迟为 null 表示复制线程异常,需检查 io/sql 状态及磁盘、relay_log_space_limit、大事务等;binlog_expire_logs_seconds 应比最长扩容时间多留 2 小时。

新节点加不进去,START SLAVE 报 Could not initialize master info structure
这是最常见的卡点:新节点没清空旧复制元数据,直接执行 START SLAVE 就会失败。MySQL 会尝试复用残留的 master.info(或 8.0+ 的系统表),但里面记录的 GTID 或 binlog 位置早已失效。
- 务必在配置完
CHANGE REPLICATION SOURCE TO后,先执行RESET SLAVE ALL—— 注意是ALL,它会清掉所有复制状态、中继日志和元数据表 - 再执行
CHANGE REPLICATION SOURCE TO,明确指定SOURCE_AUTO_POSITION = 1(推荐)或精确的SOURCE_LOG_FILE+SOURCE_LOG_POS - 如果主库开了
enforce_gtid_consistency=ON(生产应强制开启),新节点也必须设为gtid_mode=ON,否则START SLAVE直接拒绝
为什么不能直接 mysqldump 导出全量再导入?
因为 dump 过程中主库持续写入,导出的快照和当前 GTID 集不一致;等你导入完、启动复制,从库很可能跳过大量事务,或者因 GTID 冲突卡住。
- 正确做法是用
mysqldump --single-transaction --master-data=2 --all-databases,它会在 dump 开头自动加FLUSH TABLES WITH READ LOCK(短锁)并记录CHANGE MASTER TO语句 - 更稳妥的是用
mysqlpump(5.7+)或mydumper(支持并发、更轻量),它们对大库友好,且能保留 GTID 位置 - 导入后别急着启复制:先查
SELECT @@GLOBAL.GTID_EXECUTED;确认和 dump 记录的 GTID 集一致,再CHANGE REPLICATION SOURCE TO
CHANGE REPLICATION SOURCE TO 中 SOURCE_AUTO_POSITION 和手动指定位置的区别
本质是 GTID 模式下「让 MySQL 自己找起点」还是「你来指定起点」。前者省事但依赖主从 GTID 严格对齐;后者灵活但容易配错。
- 用
SOURCE_AUTO_POSITION = 1:要求主从 GTID 集有交集,MySQL 自动计算缺失事务。适合主库未清理过 binlog、从库完全空白的新节点 - 用
SOURCE_LOG_FILE+SOURCE_LOG_POS:绕过 GTID,走传统文件+偏移。适合主库 binlog 被 purge 过,或你想从某个已知备份点开始追 - 混用危险:
SOURCE_AUTO_POSITION = 1时再传SOURCE_LOG_FILE会被忽略;反之若设了SOURCE_AUTO_POSITION = 0却漏写SOURCE_LOG_POS,启动直接报错
扩容后延迟飙升,SHOW SLAVE STATUS\G 显示 Seconds_Behind_Master: NULL
这通常不是网络问题,而是新节点 IO 线程没拉到日志,或者 SQL 线程卡在某个事务上。NULL 表示复制线程异常中断,不是“追上了”。
- 先看
Slave_IO_Running和Slave_SQL_Running是否都为Yes;若否,查Last_IO_Error或Last_SQL_Error - 常见原因:新节点磁盘慢(尤其机械盘)、
relay_log_space_limit设太小导致频繁刷盘、主库大事务(如ALTER TABLE)在从库回放卡住 - 临时缓解:调大
slave_parallel_workers(8.0+ 推荐用slave_parallel_type = LOGICAL_CLOCK),但别超过 CPU 核数
binlog_expire_logs_seconds 设置太短——新节点还没拉完,主库就把旧 binlog 删了,复制永远卡在 Retrieved_Gtid_Set 不全的状态。这个值至少要比最长单次扩容时间多留 2 小时。











