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

确认当前 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=ON、read_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 —— 这类问题不会在文档里强调,但实际迁移中高频发生。










