题 Mysql master-master不能复制


我正在两个服务器(db1和db2)上设置master-master mysql复制。我开始将db2设置为db1的从属设备,并且工作正常。但是当我将db1设置为db2的slave时,它不会复制。

从表面上看,一切看起来都不错,但数据并没有复制。任何一个错误日志都没有错误。从属状态正在更新bin日志位置。我使用mysqlbinlog检查db2上的binlog和db1上的中继日志,所有查询都在那里,但没有执行到db1。

两个服务器上的“show slave status”显示slave io和sql线程都是“Yes”,并且sql线程更新了中继日志位置。

同样在两台服务器上:

>echo "show processlist" | mysql | grep "system user"
166819 system user NULL Connect 3655 Waiting for master to send event NULL
166820 system user NULL Connect 3507 Has read all relay log; waiting for the slave I/O thread to update it NULL

db1的相关配置:

server-id = 1
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 4
auto_increment_offset = 1
master-host = db2
master-port = 3306
master-user = slaveuser
master-password = ***
skip-slave-start
sync_binlog = 1
binlog-ignore-db=mysql

配置db2

server-id = 2
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 4
auto_increment_offset = 2
master-host = db1
master-port = 3306
master-user = slaveuser
master-password = ***
sync_binlog = 1
relay-log=mysql-relay-bin
binlog-ignore-db=mysql

我还能找到什么来确保db1执行db2的查询?


6
2018-01-13 06:05




投票将问题移至ServerFault。否则,这是一个很好的形成,值得回答的问题! - markus


答案:


你的配置看起来并不完整 - 你在两个配置中的某个地方都有'log-bin = mysql-master-bin'(原文如此)吗?通常,从主服务器到从服务器(任一方向)的复制如下所示:

mysql - > master binlog - >(network to slave) - > slave relaylog - > slave

你需要在两个方向上做到这一点;如果您没有在db2上记录事务,则它没有任何内容可以发送回db1。所以基本上,确保在两台服务器上设置log-bin和relay-log。

您不需要用于链接的log-slave-updates(master - > slave - > slave)。例如,如果您从双主配置连接第三个从设备进行备份将非常有用。因为你永远不会发送db1-> db2-> db1(坏循环),所以它是无用的日志记录。


2
2018-01-16 20:46



是的,我在配置文件中也有log-bin = mysql-bin。正如我所提到的,我使用了mysqlbinlog来确认来自db2的查询是在db2上的binlog中,还是在db1上的中继日志中。它缺少的唯一部分是“slave relaylog - > slave”。 - sorohan


我们将两台机器上的mysql服务器升级到5.0.91,现在正在运行。显然5.0.32和5.0.33是非常错误的,并且mysql中的复制开始在5.0.70左右平滑。


1
2018-03-18 04:42