在现代应用中,MySQL数据库的高可用性和负载均衡变得越发重要。双主复制(也称为互为主从复制)是一种实现数据库高可用性和数据冗余的有效方法。在这个过程中,两台MySQL服务器互为主机,既能接收写操作,又能相互同步数据。下面,我们将详细介绍在Linux环境中如何配置MySQL双主复制。
前提条件
- 两台Linux服务器(假设为MySQL服务器A和B)。
- 两台服务器上已安装MySQL(版本需相同)。
- 确保两台服务器之间网络连通性良好。
步骤一:基本环境准备
在两台MySQL服务器上,首先要确保它们的版本一致,并配置好主机名和IP地址。
# 在服务器A
hostnamectl set-hostname mysqlA
echo "192.168.1.10 mysqlA" >> /etc/hosts
# 在服务器B
hostnamectl set-hostname mysqlB
echo "192.168.1.20 mysqlB" >> /etc/hosts
步骤二:配置MySQL
1. 配置MySQL基础参数
在两台服务器上,修改MySQL配置文件my.cnf
(通常位于/etc/my.cnf
或/etc/mysql/my.cnf
),使其具备复制所需参数。
在MySQL服务器A上,添加如下配置:
[mysqld]
server-id = 1
log-bin = mysqlA-bin
binlog-do-db = testdb # 指定需要复制的数据库
在MySQL服务器B上,添加如下配置:
[mysqld]
server-id = 2
log-bin = mysqlB-bin
binlog-do-db = testdb # 指定需要复制的数据库
2. 重启MySQL服务
# 在服务器A和B上分别执行
systemctl restart mysqld
3. 创建复制用户
在两台服务器上,分别创建一个用于复制的用户。
在服务器A上,登录MySQL:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
同样的命令在服务器B上执行。
4. 记录二进制日志位置
在配置完用户后,需要获取当前的二进制日志文件和位置。
SHOW MASTER STATUS;
记录下输出的信息,例如:
File
: mysqlA-bin.000001Position
: 154
在服务器B上执行同样操作,也记录下信息。
步骤三:配置双主复制
1. 在服务器A上配置对B的复制
CHANGE MASTER TO
MASTER_HOST='mysqlB',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysqlB-bin.000001', -- 替换为之前记录的值
MASTER_LOG_POS=154; -- 替换为之前记录的值
START SLAVE;
2. 在服务器B上配置对A的复制
CHANGE MASTER TO
MASTER_HOST='mysqlA',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysqlA-bin.000001', -- 替换为之前记录的值
MASTER_LOG_POS=154; -- 替换为之前记录的值
START SLAVE;
步骤四:检查复制状态
在两台服务器上执行以下命令检查复制状态:
SHOW SLAVE STATUS\G;
确保Slave_IO_Running
和Slave_SQL_Running
都为Yes
,表示复制正常。
注意事项
- 数据一致性:在进行双主复制之前,请确保两台服务器中的数据一致。如果数据不一致,建议先进行全量数据同步。
- 冲突处理:双主复制可能会导致数据冲突,尤其是在同一数据被两台服务器同时写的时候,需谨慎处理。
- 监控和故障恢复:定期监控复制状态,并做好故障恢复方案。
通过以上步骤,我们已经成功配置了MySQL的双主复制,实现了两个MySQL实例的数据同步。这种配置适合于高可用性要求较高的场景,可以有效提高系统的可靠性和可用性。