复制节点换机迁移是什么
把从库(或主库角色)从一台服务器搬到另一台上,标准做法是用备份或 Clone 在新机重建数据,追平后按计划切换拓扑,观察期结束再下线老机。直接物理搬运数据目录风险高:InnoDB 的重做日志与双写文件带有硬件与页大小假设,跨机型、跨内核版本经常无法直接启动。迁移清单里最容易漏的一项是 server_id:新机若沿用旧值,与老机同时在线时复制行为会异常。
基本信息
| 目标 | 换机器但保持角色(从库仍是从库)与数据一致 |
|---|---|
| 重建方式 | 备份恢复(通用)或 Clone 插件(8.0.17+ 更快) |
| 必须改项 | server_id 必须换成新值,避免与老机冲突 |
| 追平判断 | Seconds_Behind_Source 归零且 Executed_Gtid_Set 与源一致 |
| 一致性校验 | pt-table-checksum 或按表行数抽样比对 |
典型使用场景
- 硬件替换:老服务器到期或故障前把实例迁到新机器
- 资源扩容:磁盘或内存不足,换到更大规格的机型
- 机房搬迁:实例随业务搬到新机房,保持原有复制拓扑
- 版本升级路径:先迁到新机再原地升级,降低回滚难度
- 老机退役:保留一台可回退的旧实例,观察期结束后再清理
追平与校验
追平与校验
-- 新机配置复制(自动位点方式)
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='10.0.0.10', SOURCE_USER='repl', SOURCE_PASSWORD='***',
SOURCE_AUTO_POSITION=1;
START REPLICA;
-- 确认追平:延迟归零且已执行集合与源端一致
SHOW REPLICA STATUS\G
SELECT @@server_id; -- 新机必须是与老机不同的值
-- 全量一致性复核(低峰执行)
pt-table-checksum --host=10.0.0.10 --user=checksum --password='***'迁移步骤与检查点
| 步骤 | 动作 | 检查点 |
|---|---|---|
| 1 准备 | 新机装同版本实例,配置对齐 | 参数模板与老机一致,server_id 改为新值 |
| 2 重建数据 | 备份恢复或 Clone 建库 | 表数量、行数量级与老机一致 |
| 3 拉复制 | 配置源并 START REPLICA | IO/SQL 线程均为 Yes |
| 4 追平校验 | 等待延迟归零后做一致性校验 | 校验无差异,GTID 集合一致 |
| 5 切换 | 计划窗口内改拓扑指向 | 应用侧连接切换成功且无报错 |
| 6 观察下线 | 观察期后关闭老机并保留备份 | 回退方案与备份仍在手 |
迁移期间老机不要提前关掉:保留它等于保留一条回退路径。但对主库角色迁移时要注意,两台机器同时在线且 server_id 相同会让复制拓扑行为异常,这一步必须单独验证。
不要用直接拷贝数据目录的方式跨机型迁移:页大小、重做日志与双写文件都带有源环境假设,启动失败甚至数据损坏的概率远高于重建方式。