mysql从单机迁移到集群如何操作_mysql集群迁移指南

1次阅读

mysql单机迁集群须先校验版本兼容性(如mgr要求≥8.0.19)、启用row格式binlog、转myisam为innodb、禁用只读模式;导出需–set-gtid-purged=off,导入前停binlog并重置gtid;新节点须清空datadir后初始化再导入数据,最后通过mysql shell加入集群。

mysql从单机迁移到集群如何操作_mysql集群迁移指南

确认当前 MySQL 单机版本与集群组件兼容性

迁移前必须核对 mysqld --version 输出的版本号,尤其是小版本(如 8.0.33 vs 8.0.37),部分 MySQL Group Replication 或 InnoDB Cluster 要求最低版本为 8.0.19,而 Percona XtraDB Cluster 对 5.7 支持已逐步终止。若单机是 5.6 或更早,不能直连 MGR 或 PXC,需先升级到 5.7.25+ 或 8.0.19+ 并完成 mysql_upgrade

  • 运行 select VERSION();SHOW varIABLES LIKE 'log_bin';,确保 binlog 已启用且格式为 ROW
  • 检查是否使用 MyISAM 表:MGR 不支持,需提前转为 InnoDB:ALTER table t ENGINE=InnoDB;
  • 禁用 super_read_only=ONread_only=ON 等限制,否则后续加入集群时节点无法写入

导出数据时避开 GTID 冲突和自增主键重复

直接 mysqldump 全库导出会把原实例的 gtid_purged 写入 dump 文件,若目标集群已有 GTID 集合,恢复时会报错 GTID_PURGED can only be set when GTID_EXECUTED is empty。必须显式跳过 GTID 相关语句。

  • 导出命令加 --set-gtid-purged=OFF,例如:mysqldump -u root -p --all-databases --set-gtid-purged=OFF > full_backup.sql
  • 若表含 AUTO_INCREMENT,且集群多写节点可能并发插入,建议在导入后执行 ALTER TABLE t AUTO_INCREMENT = <em>N</em>; 手动设偏移(N 取原库最大 ID + 1000)
  • 避免用 --single-transaction 导出大表:某些集群复制延迟下,可能导致从节点读到不一致快照;改用 --lock-all-tables(停写窗口可控时)

在集群中初始化第一个节点并加载数据

以 MySQL InnoDB Cluster(基于 Group Replication)为例,不能把单机 mysqld 直接“升级”为集群节点,必须重装实例并清空 datadir。新节点启动后,再导入数据,最后才加入集群。

  • 停止原单机 MySQL,备份 /var/lib/mysql 后清空该目录
  • 用相同版本 MySQL 初始化:mysqld --initialize-insecure --datadir=/var/lib/mysql,然后启动干净实例
  • 导入前执行 SET SQL_LOG_BIN = 0;,再 source dump 文件,防止导入过程产生 binlog 干扰集群同步
  • 导入完成后执行 RESET MASTER; 清空本地 binlog,并设置 SET GLOBAL gtid_purged = 'xxx';(值来自 dump 文件头或原库 SELECT @@GLOBAL.GTID_EXECUTED;

添加其余节点时注意复制账户和网络权限

集群节点间靠异步/半同步复制通信,但新节点加入时需能连接种子节点的 MySQL 端口(默认 3306),且账号必须有 REPLICATION SLAVE 权限。常见错误是防火墙放行了应用端口却漏掉复制端口,或账号未授权 host='%' 导致连接被拒。

  • 在种子节点创建复制用户:CREATE USER 'repl'@'%' IDENTIFIED BY 'pwd'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  • 确认所有节点 bind_address 不是 127.0.0.1,应设为 0.0.0.0 或具体内网 IP
  • 加入集群命令(MySQL Shell):cluster.addInstance('repl@node2:3306');,若卡住超时,优先查 telnet node2 3306 是否通,而非怀疑配置项

真正麻烦的是跨机房或云厂商 VPC 的 MTU 不一致,会导致 Group Replication 心跳包被截断,现象是节点反复 offline,日志里出现 Connection lost during packet read —— 这类问题不会在文档里强调,但实际迁移中高频发生。

text=ZqhQzanResources