MySQL 8.0主主复制(自增步长2)从备份导入的正确步骤问询
正确操作顺序
- 在两个节点执行
STOP REPLICA; - 在其中一个节点执行
source c:/dump.sql导入备份数据 - 计算所有带自增列的表的最大自增值
maxVal,根据节点的自增偏移设置,在导入备份的节点执行ALTER TABLE every_table AUTO_INCREMENT = 目标值(目标值需保证该节点后续生成的自增值符合奇数/偶数规则且不与现有数据冲突) - 在两个节点执行
RESET MASTER; - 在两个节点执行
START REPLICA; - 在两个节点执行
SHOW REPLICA STATUS\G验证复制状态
各步骤疑问解答
STOP REPLICA;是否在两个节点执行?
是。必须在两个节点都执行停止复制操作,防止导入数据过程中,复制线程同步数据导致数据不一致,或备份导入的操作被同步到另一个节点引发冲突。source c:/dump.sql是否仅在一个节点执行?
是。只需要在其中一个节点执行导入,主主复制架构下,导入完成后,该节点的操作会同步到另一个节点(后续重启复制后),无需在两个节点重复导入,否则会导致数据重复插入报错。ALTER TABLE every_table AUTO_INCREMENT = maxVal + 1是否需要在第二个节点执行?
不需要。当在导入备份的节点执行该ALTER语句后,主主复制重启后会将这个修改同步到第二个节点。但注意不能直接用maxVal +1作为目标值,要结合节点的自增偏移(offset)和步长(increment=2)调整:
- 若节点是奇数自增值节点(
auto_increment_offset=1),目标值应为大于maxVal的最小奇数; - 若节点是偶数自增值节点(
auto_increment_offset=2),目标值应为大于maxVal的最小偶数。
这样才能保证后续生成的自增值不与现有数据冲突,且符合奇偶分配规则。
RESET MASTER;第二个节点也需要执行吗?
是。两个节点都需要执行RESET MASTER;,该操作会清空现有二进制日志文件并重置日志索引,避免后续复制时出现日志位置不匹配的问题,确保主主复制的二进制日志序列重新对齐。START REPLICA;是否在两个节点执行?
是。完成所有数据导入和自增设置后,需要在两个节点都启动复制线程,恢复主主复制的双向同步功能。SHOW REPLICA STATUS是否在两个节点执行?
是。需要在两个节点都执行SHOW REPLICA STATUS\G(MySQL 8.0建议用\G格式化输出),检查Slave_IO_Running和Slave_SQL_Running是否都为Yes,确认复制状态正常,避免同步异常未及时发现。
内容的提问来源于stack exchange,提问作者user2347380

