MySQL 主主同步配置步骤

橘子海
橘子海
发布时间:2026-10-14 | 2人浏览过
原创

本文详细介绍如何实现 MySQL 主主同步(双向复制),使两台服务器互为读写节点。内容涵盖网络拓扑规划、互相同步用户创建、my.cnf 关键参数设置、自增 ID 偏移量处理、主从位置指定以及状态验证与测试,确保数据一致性并避免冲突。

准备条件

配置前需明确两台服务器的角色与基础信息。假设需要同步的数据库名为 db_rocky。

服务器名IP系统MySQL 版本
odd.example.com192.168.1.116RHEL 5.85.5.16
even.example.com192.168.1.115RHEL 5.85.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] 下加入以下内容。

  1. 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...

  2. 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: Yes
  • Slave_SQL_Running: Yes

第6步:功能测试

在 EVEN 上创建数据,观察是否自动同步至 ODD。

  1. 在 EVEN 插入数据:
use db_rocky;
create table water (id int);
insert into water values(1);
commit;
  1. 在 ODD 查询确认:
select * from water;
-- 结果应包含 id 为 1 的记录

若双向均能正常读写并同步,则主主配置成功。

以上就是 MySQL 主主同步配置步骤的详细内容,更多关于 MySQL 主主双机热备配置的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表