双主复制实现
type
status
date
slug
summary
tags
category
icon
password
1️⃣ 前提条件
- 两台 MySQL 服务器:
master1和master2
- IP:
192.168.140.10(master1)、192.168.140.11(master2)
- MySQL 版本:8.0
- 用户:
repl,密码:WWW.1.com
- 建议使用 GTID 模式,简化双主冲突管理
2️⃣ 双主配置原则
- 每台主库的
server-id必须唯一
- 开启二进制日志(
log_bin)和 GTID(gtid_mode=ON)
- 事务使用
ROW模式(binlog_format=ROW)
- 双向建立复制账号,并允许对方 IP 连接
- 避免自增主键冲突(可使用
auto_increment_increment/auto_increment_offset设置)
3️⃣ 主库配置(Master1 & Master2)
3.1 编辑 /etc/my.cnf
⚠️ auto_increment_increment 和 auto_increment_offset 避免自增主键冲突。
3.2 重启 MySQL
3.3 创建复制用户
在 Master1:
在 Master2:
4️⃣ 双向连接(配置复制)
4.1 Master1 复制到 Master2
在 Master1:
4.2 Master2 复制到 Master1
在 Master2:
5️⃣ 检查复制状态
在两台服务器执行:
关键字段:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Auto_Position: 1(使用 GTID 自动定位)
6️⃣ 测试双主写入
- 在 Master1 插入一条数据
- 在 Master2 插入另一条数据
- 检查两台服务器的数据是否同步
7️⃣ 注意事项
- 避免循环更新
- 使用 GTID 可以防止重复执行事务
- 冲突管理
- 如果两个主库同时修改同一行,会导致冲突,需要应用端处理
- 监控复制状态
- 定期
SHOW SLAVE STATUS\G - 确保
Slave_IO_Running和Slave_SQL_Running始终为Yes
- 备份策略
- 双主场景建议定期全备,并设置从库做只读备份
Loading...