在现代应用中,MySQL数据库的高可用性和负载均衡变得越发重要。双主复制(也称为互为主从复制)是一种实现数据库高可用性和数据冗余的有效方法。在这个过程中,两台MySQL服务器互为主机,既能接收写操作,又能相互同步数据。下面,我们将详细介绍在Linux环境中如何配置MySQL双主复制。

前提条件

  1. 两台Linux服务器(假设为MySQL服务器A和B)。
  2. 两台服务器上已安装MySQL(版本需相同)。
  3. 确保两台服务器之间网络连通性良好。

步骤一:基本环境准备

在两台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.000001
  • Position: 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_RunningSlave_SQL_Running都为Yes,表示复制正常。

注意事项

  1. 数据一致性:在进行双主复制之前,请确保两台服务器中的数据一致。如果数据不一致,建议先进行全量数据同步。
  2. 冲突处理:双主复制可能会导致数据冲突,尤其是在同一数据被两台服务器同时写的时候,需谨慎处理。
  3. 监控和故障恢复:定期监控复制状态,并做好故障恢复方案。

通过以上步骤,我们已经成功配置了MySQL的双主复制,实现了两个MySQL实例的数据同步。这种配置适合于高可用性要求较高的场景,可以有效提高系统的可靠性和可用性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部