在 MySQL 5.6 中配置双主复制可以实现两台 MySQL 服务器之间的数据双向同步,下面为你详细介绍配置步骤:
环境准备
假设有两台 MySQL 5.6 服务器,分别为 Server A
和 Server B
,具体信息如下:
服务器 | IP 地址 | 主机名 |
---|---|---|
Server A | 192.168.1.100 | master1 |
Server B | 192.168.1.101 | master2 |
步骤 1:修改 MySQL 配置文件
分别在两台服务器上修改 MySQL 的配置文件(通常是 /etc/my.cnf
或 /etc/mysql/my.cnf
)。
Server A(192.168.1.100)
[mysqld]
# 服务器唯一 ID,必须是 1 - 2^32 之间的整数,且两台服务器不能相同
server-id = 1
# 开启二进制日志,用于记录数据库更改
log-bin = mysql-bin
# 忽略对 mysql 系统数据库的二进制日志记录,可根据需要调整
binlog-ignore-db = mysql
# 指定需要复制的数据库,可根据需要调整
binlog-do-db = your_database_name
# 允许从服务器更新主服务器
log-slave-updates = 1
# 确保主从复制的一致性
sync-binlog = 1
# 开启半同步复制(可选)
# rpl_semi_sync_master_enabled = 1
# rpl_semi_sync_master_timeout = 1000
Server B(192.168.1.101)
[mysqld]
# 服务器唯一 ID,必须与 Server A 不同
server-id = 2
# 开启二进制日志
log-bin = mysql-bin
# 忽略对 mysql 系统数据库的二进制日志记录,可根据需要调整
binlog-ignore-db = mysql
# 指定需要复制的数据库,可根据需要调整
binlog-do-db = your_database_name
# 允许从服务器更新主服务器
log-slave-updates = 1
# 确保主从复制的一致性
sync-binlog = 1
# 开启半同步复制(可选)
# rpl_semi_sync_slave_enabled = 1
修改完成后,重启两台服务器的 MySQL 服务:
# 在 Server A 上执行
sudo service mysql restart
# 在 Server B 上执行
sudo service mysql restart
步骤 2:创建复制用户
分别在两台服务器上创建用于复制的用户,并授予相应的权限。
Server A(192.168.1.100)
-- 创建用于复制的用户
CREATE USER 'repl_user'@'192.168.1.101' IDENTIFIED BY 'password';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.1.101';
-- 刷新权限
FLUSH PRIVILEGES;
Server B(192.168.1.101)
-- 创建用于复制的用户
CREATE USER 'repl_user'@'192.168.1.100' IDENTIFIED BY 'password';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.1.100';
-- 刷新权限
FLUSH PRIVILEGES;
步骤 3:获取二进制日志信息
分别在两台服务器上获取当前二进制日志的文件名和位置。
Server A(192.168.1.100)
SHOW MASTER STATUS;
记录下输出结果中的 File
和 Position
值。
Server B(192.168.1.101)
SHOW MASTER STATUS;
同样记录下输出结果中的 File
和 Position
值。
步骤 4:配置从服务器信息
在 Server A 上配置其作为 Server B 的从服务器,在 Server B 上配置其作为 Server A 的从服务器。
Server A(192.168.1.100)
CHANGE MASTER TO
MASTER_HOST = '192.168.1.101',
MASTER_USER = 'repl_user',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.xxxxxx', -- 替换为 Server B 的 File 值
MASTER_LOG_POS = xxxxx; -- 替换为 Server B 的 Position 值
Server B(192.168.1.101)
CHANGE MASTER TO
MASTER_HOST = '192.168.1.100',
MASTER_USER = 'repl_user',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.xxxxxx', -- 替换为 Server A 的 File 值
MASTER_LOG_POS = xxxxx; -- 替换为 Server A 的 Position 值
步骤 5:启动从服务器
分别在两台服务器上启动从服务器进程。
Server A(192.168.1.100)
START SLAVE;
Server B(192.168.1.101)
START SLAVE;
步骤 6:检查复制状态
分别在两台服务器上检查从服务器的状态,确保复制正常工作。
Server A(192.168.1.100)
SHOW SLAVE STATUS\G
确保 Slave_IO_Running
和 Slave_SQL_Running
都为 Yes
。
Server B(192.168.1.101)
SHOW SLAVE STATUS\G
同样确保 Slave_IO_Running
和 Slave_SQL_Running
都为 Yes
。
注意事项
- 主键冲突:在双主复制环境中,需要确保插入的数据不会产生主键冲突,否则可能会导致复制失败。
- 并发更新:同时在两台服务器上对同一行数据进行更新可能会导致数据不一致,需要谨慎操作。
- 监控和维护:定期监控复制状态,及时处理可能出现的错误和异常。