MySQL 主主同步配置步骤
本文详细介绍如何实现 MySQL 主主同步(双向复制),使两台服务器互为读写节点。内容涵盖网络拓扑规划、互相同步用户创建、my.cnf 关键参数设置、自增 ID 偏移量处理、主从位置指定以及状态验证与测试,确保数据一致性并避免冲突。
准备条件
配置前需明确两台服务器的角色与基础信息。假设需要同步的数据库名为 db_rocky。
| 服务器名 | IP | 系统 | MySQL 版本 |
|---|---|---|---|
| odd.example.com | 192.168.1.116 | RHEL 5.8 | 5.5.16 |
| even.example.com | 192.168.1.115 | RHEL 5.8 | 5.5.16 |
第1步:创建同步用户
为了建立主主关系,两台服务器必须互相拥有授权给对方的权限。在每台服务器上创建用于 replication 的用户。
- 在 ODD (192.168.1.116) 上执行: 授权 EVEN (192.168.1.115) 连接。
mysql> grant replication slave on *.* to 'water'@'192.168.1.115' identified by 'cdio2010';
mysql> flush privileges;
- 在 EVEN (192.168.1.115) 上执行: 授权 ODD (192.168.1.116) 连接。
mysql> grant replication slave on *.* to 'water'@'192.168.1.116' identified by 'cdio2010';
mysql> flush privileges;
第2步:修改 my.cnf 配置文件
需要为两台服务器添加特定的复制和自增参数。编辑 /etc/my.cnf,并在 [mysqld] 下加入以下内容。
-
ODD 配置:
[mysqld] binlog-do-db=db_rocky # binlog-ignore-db=mysql replicate-do-db=db_rocky # replicate-ignore-db=mysql,information_schema log-slave-updates sync_binlog=1 auto_increment_offset=1 auto_increment_increment=2 slave-skip-errors=all注意:此处使用 offset=1,increment=2 意味着该节点生成的自增值将是 1, 3, 5...
-
EVEN 配置:
[mysqld] server-id=2 binlog-do-db=db_rocky # binlog-ignore-db=mysql replicate-do-db=db_rocky # replicate-ignore-db=mysql,information_schema log-slave-updates sync_binlog=1 auto_increment_offset=2 auto_increment_increment=2 slave-skip-errors=all注意:EVEN 必须拥有唯一的 server-id(默认通常为1,建议改为2或其他不冲突的值)。offset=2 且 increment=2 使得该节点生成的值为 2, 4, 6... 以此错开主键。
配置完成后重启两台服务器的 MySQL 服务。
第3步:查看主服务器状态
为确保获取准确的日志位置,先锁定表以防止数据写入导致 Position 变化。
- ODD 操作:
FLUSH TABLES WITH READ LOCK;然后执行SHOW MASTER STATUS\G;,记录File和Position。 - EVEN 操作:
FLUSH TABLES WITH READ LOCK;然后执行SHOW MASTER STATUS\G;,记录File和Position。
假设记录如下:
- ODD: mysql-bin.000007, position 438
- EVEN: mysql-bin.000008, position 107
第4步:指定同步源并解锁
解除锁定后,配置各自的主节点指向对方。
- ODD 指向 EVEN:
mysql> unlock tables;
mysql> change master to master_host='192.168.1.115', master_user='water', master_password='cdio2010', master_log_file='mysql-bin.000008', master_log_pos=107;
- EVEN 指向 ODD:
mysql> unlock tables;
mysql> change master to master_host='192.168.1.116', master_user='water', master_password='cdio2010', master_log_file='mysql-bin.000007', master_log_pos=438;
第5步:启动同步线程并验证
分别在两台服务器上启动 Slave 线程。
START SLAVE;
检查同步状态:
SHOW SLAVE STATUS\G;
成功的关键判断标准是以下两个参数均为 Yes:
Slave_IO_Running: YesSlave_SQL_Running: Yes
第6步:功能测试
在 EVEN 上创建数据,观察是否自动同步至 ODD。
- 在 EVEN 插入数据:
use db_rocky;
create table water (id int);
insert into water values(1);
commit;
- 在 ODD 查询确认:
select * from water;
-- 结果应包含 id 为 1 的记录
若双向均能正常读写并同步,则主主配置成功。
以上就是 MySQL 主主同步配置步骤的详细内容,更多关于 MySQL 主主双机热备配置的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









