我正在两台服务器(db1 和 db2)上设置主-主 mysql 复制。我首先将 db2 设置为 db1 的从属,这工作正常。但是当我将 db1 设置为 db2 的从属时,它不会进行复制。
表面上看一切正常,但数据并未复制。两个错误日志中均无错误。从属状态正在更新 bin 日志位置。我已使用 mysqlbinlog 检查 db2 上的 binlog 和 db1 上的中继日志,所有查询均进入其中,但未执行到 db1。
两台服务器上的“show slave status”显示从属 io 和 sql 线程均为“是”,并且中继日志位置由 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 的查询?
答案1
您的配置看起来不完整 - 两个配置中是否有“log-bin=mysql-master-bin”(原文如此)?通常,从主服务器到从服务器(任一方向)的复制如下所示:
mysql -> 主 binlog -> (网络到从属)-> 从属中继日志 -> 从属
您需要双向执行此操作;如果您没有在 db2 上记录事务,那么它就没有任何内容可以发送回 db1。因此,基本上,请确保在两个服务器上都设置了 log-bin 和 Relay-log。
您不需要 log-slave-updates,它用于链接(主 -> 从 -> 从)。例如,如果您从双主配置中附加第三个从属设备以进行备份,它将很有用。因为您永远不会发送 db1->db2->db1(坏循环),所以它是无用的日志记录。
答案2
我们将两台机器上的 mysql 服务器升级到 5.0.91,现在它可以正常工作了。显然 5.0.32 和 5.0.33 有很多错误,mysql 中的复制在 5.0.70 左右开始变得顺畅。