文章目录
- MySQL 双主双从集群
- 一、 准备环境
- 二、 配置主服务器
- 1. 配置 MySQL 主服务器 1 (192.168.1.1)
- 2. 配置 MySQL 主服务器 2 (192.168.1.2)
- 三、配置从服务器
- 1. 配置 MySQL 从服务器 1 (192.168.1.3)
- 2. 配置 MySQL 从服务器 2 (192.168.1.4)
- 3. 在主服务器 1 上配置复制到主服务器 2
- 4. 在主服务器 2 上配置复制到主服务器 1
- 四、 验证复制
- 五、注意事项
MySQL 双主双从集群
一、 准备环境
确保您有四台服务器,每台服务器上都已经安装了 MySQL。假设服务器的 IP 地址如下:
- 主服务器 1: 192.168.1.1
- 主服务器 2: 192.168.1.2
- 从服务器 1: 192.168.1.3
- 从服务器 2: 192.168.1.4
二、 配置主服务器
1. 配置 MySQL 主服务器 1 (192.168.1.1)
编辑 MySQL 配置文件 my.cnf(位置通常在 /etc/my.cnf 或 /etc/mysql/my.cnf),添加以下配置:
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = ROW
auto_increment_increment = 2
auto_increment_offset = 1
- server-id:每个 MySQL 服务器的唯一 ID。
- log_bin:启用二进制日志。
- binlog_format:设置二进制日志格式为 ROW。
- auto_increment_increment 和 auto_increment_offset:设置自动递增值的增量和偏移量,以便在主从同步中避免冲突。
重启 MySQL 服务以使配置生效:
sudo systemctl restart mysql
创建复制用户并授权:
#创建用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
#授予权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
获取当前的二进制日志位置:
SHOW MASTER STATUS;
记下 File 和 Position 值,稍后在从服务器的配置中会用到。
2. 配置 MySQL 主服务器 2 (192.168.1.2)
重复主服务器 1 的配置步骤,修改 server-id:
[mysqld]
server-id = 2
log_bin = mysql-bin
binlog_format = ROW
auto_increment_increment = 2
auto_increment_offset = 2
重启 MySQL 服务:
sudo systemctl restart mysql
创建复制用户和授权(与主服务器 1 相同):
#创建用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
#授予权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
获取当前的二进制日志位置:
SHOW MASTER STATUS;
记下 File 和 Position 值。
三、配置从服务器
1. 配置 MySQL 从服务器 1 (192.168.1.3)
编辑 my.cnf 文件:
[mysqld]
server-id = 3
relay_log = mysql-relay-bin
log_bin = mysql-bin
binlog_format = ROW
auto_increment_increment = 2
auto_increment_offset = 1
重启 MySQL 服务:
sudo systemctl restart mysql
配置从服务器 1 复制 主服务器 1的数据:
CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1234;
START SLAVE;
请根据主服务器提供的 File 和 Position 值调整。
MASTER_LOG_FILE=‘File值’
MASTER_LOG_POS=Position值
2. 配置 MySQL 从服务器 2 (192.168.1.4)
重复从服务器 1 的配置步骤,修改 server-id:
[mysqld]
server-id = 4
relay_log = mysql-relay-bin
log_bin = mysql-bin
binlog_format = ROW
auto_increment_increment = 2
auto_increment_offset = 2
重启 MySQL 服务:
sudo systemctl restart mysql
配置从服务器 2 复制 主服务器 2数据:
CHANGE MASTER TO MASTER_HOST='192.168.1.2', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1234;
START SLAVE;
3. 在主服务器 1 上配置复制到主服务器 2
CHANGE MASTER TO
MASTER_HOST='192.168.1.2',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1234;
START SLAVE;
4. 在主服务器 2 上配置复制到主服务器 1
CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1234;
START SLAVE;
四、 验证复制
在每个从服务器上运行以下命令,检查复制状态:
SHOW SLAVE STATUS\G
确保 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,并且没有错误信息。
五、注意事项
- 数据一致性:在配置双主复制之前,请确保主服务器上数据的一致性。
- 冲突解决:在双主双从配置中,可能会发生主服务器间的数据冲突。需要对应用程序设计和数据写入策略进行适当调整,以减少冲突。
- 监控:建议使用监控工具来实时跟踪复制状态和性能。
- 网络延迟:由于网络延迟和带宽问题,确保主服务器之间的同步不会影响性能。
以上步骤适用于 MySQL 5.7 及以上版本。根据实际环境和 MySQL 版本,某些配置项可能有所不同。
回到顶层