MySQL 双主模式(Master-Master)源码安装

MySQL 双主模式(Master-Master Replication)是一种主主复制架构,两台 MySQL 实例彼此互为主库,从而实现数据同步、容灾、高可用。但必须做好主键冲突、数据一致性控制


一、前提条件

条件说明
两台机器或同一台机器两个实例(不同端口)
MySQL 版本一致推荐使用 MySQL 5.7/8.0
网络互通主机 A 能访问主机 B 3306 端口
同步时间ntp 保证时钟一致性
安装方式这里为 源码安装方式

二、源码安装 MySQL(以 MySQL 8 为例)

1. 安装依赖

yum install -y gcc gcc-c++ cmake make ncurses-devel bison openssl-devel libaio

2. 下载源码并编译

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36.tar.gz
tar -zxvf mysql-8.0.36.tar.gz
cd mysql-8.0.36
mkdir build && cd build

cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
         -DWITH_BOOST=../boost \
         -DMYSQL_DATADIR=/data/mysql \
         -DSYSCONFDIR=/etc \
         -DWITH_INNOBASE_STORAGE_ENGINE=1

make -j$(nproc)
make install

3. 初始化数据目录

useradd -r mysql
chown -R mysql:mysql /usr/local/mysql /data/mysql

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

记录生成的临时 root 密码。


三、配置两台 MySQL 主主复制

🖥️ 假设环境:

节点IPServer ID监听端口
A192.168.1.1013306
B192.168.1.2023306

A 节点配置 /etc/my.cnf

[mysqld]
server-id=1
log-bin=mysql-bin
relay-log=mysql-relay-bin
gtid_mode=ON
enforce-gtid-consistency=ON
log_slave_updates=ON
binlog_format=ROW
auto_increment_increment=2
auto_increment_offset=1

B 节点配置 /etc/my.cnf

[mysqld]
server-id=2
log-bin=mysql-bin
relay-log=mysql-relay-bin
gtid_mode=ON
enforce-gtid-consistency=ON
log_slave_updates=ON
binlog_format=ROW
auto_increment_increment=2
auto_increment_offset=2

参数说明

参数名说明
server-id必须唯一
log-bin启用二进制日志
gtid_mode=ON启用 GTID
log_slave_updates=ON使得 slave 写 binlog,主主必须
auto_increment_increment防止主键冲突(设置为节点数)
auto_increment_offset不同节点起点不同

四、创建复制用户(在 A 和 B)

CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

五、设置主从关系(双向)

在 A 上连接 B:

CHANGE MASTER TO
  MASTER_HOST='192.168.1.20',
  MASTER_USER='repl',
  MASTER_PASSWORD='123456',
  MASTER_AUTO_POSITION=1;

START SLAVE;

在 B 上连接 A:

CHANGE MASTER TO
  MASTER_HOST='192.168.1.10',
  MASTER_USER='repl',
  MASTER_PASSWORD='123456',
  MASTER_AUTO_POSITION=1;

START SLAVE;

六、验证状态

SHOW SLAVE STATUS\G

确保:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

表示主从关系生效。


七、常见问题和注意事项

问题/风险说明
主键冲突必须配置 auto_increment_* 防止冲突
双写冲突避免对同一张表同时写入(应用侧保证)
数据一致性推荐使用 GTID 模式 + ROW 格式
split-brain(脑裂)可结合 Keepalived + VIP 实现单点写入
死循环复制(循环写)使用 log_slave_updates=ON 并小心业务逻辑
容灾建议主主 + 虚拟 IP + 单写多读

八、总结一图

  A: 192.168.1.10 (server-id=1)
     ↔ (主从 + GTID) ↔
  B: 192.168.1.20 (server-id=2)

九、延伸建议

推荐策略工具/说明
自动切换主库MHA、Orchestrator、ProxySQL
集群高可用可考虑 MySQL InnoDB Cluster
日志延迟监控监控 Seconds_Behind_Master
数据对比校验使用 pt-table-checksum 工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值