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_Running
和Slave_SQL_Running
为Yes
。
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双主复制,实现数据同步与高可用性。这种配置方式适用于需要高可用性和数据同步的场景,如负载均衡和灾难恢复。