通过配置MySQL双节点环形复制,设置唯一server-id、开启GTID与binlog,并调整auto-increment-offset避免主键冲突;2. 在各节点创建复制用户并授权;3. 使用CHANGE MASTER TO建立双向复制通道并启动同步;4. 检查Slave_IO_Running和Slave_SQL_Running状态确保复制正常;5. 注意避免并发写入同一数据、谨慎执行DDL操作,防止冲突导致复制中断。

MySQL多主复制(Multi-Master Replication)可以让多个数据库节点互相作为主库,实现双向或环形数据同步。这种架构适合需要高可用、读写分离和跨地域部署的场景。下面介绍基于MySQL原生复制的环形多主搭建方法(以两个节点为例),不依赖第三方中间件。
1. 环境准备与配置要求
确保两台服务器已安装MySQL(建议版本一致,如MySQL 8.0),并能通过网络互通。例如:
- Node A:IP 192.168.1.10,server-id=1
- Node B:IP 192.168.1.20,server-id=2
每台MySQL需开启二进制日志(binlog)、指定唯一server-id,并启用中继日志和GTID(推荐)。修改my.cnf配置文件:
Node A 配置片段:
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
relay-log = relay-log
auto-increment-increment = 2
auto-increment-offset = 1
Node B 配置片段:
[mysqld]
server-id = 2
log-bin = mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
relay-log = relay-log
auto-increment-increment = 2
auto-increment-offset = 2
说明: auto-increment设置是为了避免自增主键冲突。Node A生成奇数(1,3,5...),Node B生成偶数(2,4,6...)。
2. 创建复制用户
在每个节点上创建用于复制的账户:
登录Node A执行:
CREATE USER 'repl'@'192.168.1.20' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.20';
FLUSH PRIVILEGES;
登录Node B执行:
CREATE USER 'repl'@'192.168.1.10' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.10';
FLUSH PRIVILEGES;
3. 配置主从关系(双向)
使用CHANGE MASTER TO命令建立互为主从的关系。
在Node A上执行,指向Node B:
CHANGE MASTER TO
MASTER_HOST='192.168.1.20',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_AUTO_POSITION=1
FOR CHANNEL 'master-B';
在Node B上执行,指向Node A:
CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_AUTO_POSITION=1
FOR CHANNEL 'master-A';
启动复制:
START SLAVE FOR CHANNEL 'master-B'; (Node A执行)
START SLAVE FOR CHANNEL 'master-A'; (Node B执行)
4. 检查复制状态
查看复制是否正常运行:
SHOW SLAVE STATUS FOR CHANNEL 'master-B'\G (Node A)
SHOW SLAVE STATUS FOR CHANNEL 'master-A'\G (Node B)
重点关注以下字段:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Last_Error: (应为空)
- Retrieved_Gtid_Set / Executed_Gtid_Set: 有更新表示同步生效
5. 注意事项与限制
多主复制虽然提升了可用性,但存在一些风险和限制:
- 避免同一行数据在两个节点同时更新,否则可能引发冲突导致复制中断。
- DDL操作(如ALTER TABLE)需谨慎,建议停写或在单一节点执行。
- 网络延迟可能导致数据不一致,建议监控复制延迟。
- 故障恢复复杂,需人工介入处理冲突事务。
生产环境可考虑使用MHA、PXC(Percona XtraDB Cluster)或MySQL InnoDB Cluster来提升稳定性和自动化能力。
基本上就这些。按步骤操作,确保配置准确,多主复制可以稳定运行。关键是预防主键冲突和避免并发写入同一数据。










