Administrator
Published on 2025-03-10 / 6 Visits
0

MySQL 5.6 中配置双主复制

#AI

在 MySQL 5.6 中配置双主复制可以实现两台 MySQL 服务器之间的数据双向同步,下面为你详细介绍配置步骤:

环境准备

假设有两台 MySQL 5.6 服务器,分别为 Server AServer B,具体信息如下:

服务器IP 地址主机名
Server A192.168.1.100master1
Server B192.168.1.101master2

步骤 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;

记录下输出结果中的 FilePosition 值。

Server B(192.168.1.101)

SHOW MASTER STATUS;

同样记录下输出结果中的 FilePosition 值。

步骤 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_RunningSlave_SQL_Running 都为 Yes

Server B(192.168.1.101)

SHOW SLAVE STATUS\G

同样确保 Slave_IO_RunningSlave_SQL_Running 都为 Yes

注意事项

  • 主键冲突:在双主复制环境中,需要确保插入的数据不会产生主键冲突,否则可能会导致复制失败。
  • 并发更新:同时在两台服务器上对同一行数据进行更新可能会导致数据不一致,需要谨慎操作。
  • 监控和维护:定期监控复制状态,及时处理可能出现的错误和异常。