MySQL双主复制(Master-Master Replication)是一种数据库复制技术,它允许两个MySQL服务器实例互为对方的从服务器,从而实现数据的双向同步。这种配置方式可以增强系统的灵活性和高可用性。以下是实现MySQL双主复制的详细指南。

1. 确保环境准备

在开始配置之前,确保以下条件得到满足:

  • 两台MySQL服务器实例。
  • 两台服务器都已经安装并配置了MySQL。
  • 两台服务器之间可以互相通信。

2. 配置服务器ID

每个MySQL服务器实例都需要一个唯一的ID,称为server-id。这是为了确保MySQL实例之间的正确通信。

-- 修改MySQL配置文件,通常为 /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
server-id = 1

重复上述步骤为第二个MySQL实例设置一个不同的server-id

3. 启用GTID

GTID(全局事务标识符)是MySQL 5.6及以上版本提供的一种复制技术,可以简化主从复制的配置和管理。

-- 修改MySQL配置文件
[mysqld]
gtid_mode = ON
enforce_gtid_consistency = ON

确保两个MySQL实例都启用了GTID。

4. 创建复制用户

在两个MySQL实例上创建具有复制权限的用户。

-- 在第一个MySQL实例上创建用户
CREATE USER 'replication_user@' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user@';
FLUSH PRIVILEGES;

-- 在第二个MySQL实例上创建用户
CREATE USER 'replication_user@' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user@';
FLUSH PRIVILEGES;

确保使用相同的用户名和密码。

5. 启动复制

在两个MySQL实例上启动复制。

-- 在第一个MySQL实例上
START SLAVE;
-- 在第二个MySQL实例上
START SLAVE;

6. 验证复制状态

使用以下命令检查复制状态。

-- 在第一个MySQL实例上
SHOW SLAVE STATUS\G
-- 在第二个MySQL实例上
SHOW SLAVE STATUS\G

确保两个实例的复制状态都显示Slave_IO_RunningSlave_SQL_RunningYes

7. 测试双主复制

为了确保双主复制正常工作,可以在两个实例上插入数据,并检查另一个实例上是否同步了这些数据。

-- 在第一个MySQL实例上插入数据
INSERT INTO test_table (column1, column2) VALUES ('value1', 'value2');
-- 在第二个MySQL实例上查询数据
SELECT * FROM test_table;

如果查询结果显示了刚刚插入的数据,那么双主复制配置成功。

8. 故障转移

在双主复制配置中,如果主服务器发生故障,可以从另一个主服务器进行故障转移。

-- 在故障主服务器上
STOP SLAVE;
RESET SLAVE ALL;

-- 在健康的主服务器上
START SLAVE;

确保在故障转移后,所有的写入操作都指向新的主服务器。

总结

通过上述步骤,可以成功配置MySQL双主复制,实现数据同步与高可用性。这种配置方式适用于需要高可用性和数据同步的场景,如负载均衡和灾难恢复。