boxmoe_header_banner_img

Hello! 欢迎来到鸣乐庐!

加载中

文章导读

mysql5.7双主复制配置


avatar
lucky life 2025年5月8日 316

✅ 双主复制配置完整步骤

🧱 1. 修改配置文件(确认无误)

主库A(server-id=1)配置:

[mysqld]
server-id = 1
log-bin = mysql-bin
auto-increment-increment = 2
auto-increment-offset = 1
log-slave-updates = 1
binlog-do-db = test1 # 注意下面会建议不要使用此行,建议删除

主库B(server-id=2)配置:

[mysqld]
server-id = 2
log-bin = mysql-bin
auto-increment-increment = 2
auto-increment-offset = 2
log-slave-updates = 1
binlog-do-db = test1 # 同样建议删除

⚠️ binlog-do-db 的注意事项

建议不要使用 binlog-do-db,因为这只记录默认数据库里的操作,跨库语句可能会被忽略,造成数据不一致。

🔁 如果你想同步多个数据库,请不要用 binlog-do-db,直接记录所有库的操作。


🧼 2. 清空并同步初始数据(初始阶段建议清数据)

确保两台机器的 test1 数据库内容完全一致(或一台为空),可以选择:

  • 从一台导出 mysqldump
  • 导入到另一台
  • 或者在初始化前把两边数据都清空

🔐 3. 创建复制账户(互为主从)

主库A 上:

CREATE USER 'repl'@'%' IDENTIFIED BY 'replpass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

主库B 上也做同样操作。


🔗 4. 设置主从连接

在主库A执行以下命令(连接主库B):

CHANGE MASTER TO
MASTER_HOST='主库B的IP',

MASTER_PORT=33161, -- 这里指定了主库的端口,不加这行的默认3306端口
MASTER_USER='repl',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000001', -- 取自主库B的 SHOW MASTER STATUS
MASTER_LOG_POS= 1234; -- 同样取 SHOW MASTER STATUS 输出

在主库B执行以下命令(连接主库A):

CHANGE MASTER TO
MASTER_HOST='主库A的IP',
MASTER_USER='repl',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000001', -- 取自主库A的 SHOW MASTER STATUS
MASTER_LOG_POS= 1234;

然后分别在两台机器上运行:

START SLAVE;

检查状态:

SHOW SLAVE STATUS\G

确保 Slave_IO_RunningSlave_SQL_Running 都是 Yes


🔁 自动主键冲突避免说明

你已正确设置:

主机offsetincrement
A12
B22

这样 auto-increment 的 ID 就不会冲突。比如:

  • 主库A生成:1, 3, 5…
  • 主库B生成:2, 4, 6…

❓关于“能不能同步所有库”

是的,只要你 不设置 binlog-do-dbreplicate-do-db,就可以同步所有数据库。

如果你设置了 binlog-do-db = test1,则 只能同步该库,你要同步多个库就要删掉这个配置。


✅ 最终建议配置(两个主机都一样,配置全部数据库)

[mysqld]
server-id = 1 # 或 2
log-bin = mysql-bin
auto-increment-increment = 2
auto-increment-offset = 1 # 或 2
log-slave-updates = 1

不要设置 binlog-do-db,除非你只同步某个库



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码