请检查几件事:
1)确保Master的/etc/my.cnf有server_id实际设置
原因如下:复制依赖于 server_id。每当执行查询并记录在 master 的二进制 log 中时,master 的 server_id 都会被记录下来。默认情况下,如果 /etc/my.cnf 中未定义 server_id,则 server_id 默认为 1。但是,MySQL 复制规则要求在主服务器的 /etc/my.cnf 中显式定义 server_id。此外,对于任何给定的从站,mysqld 在从中继日志中读取 SQL 语句时检查它的 server_id,并确保它与从站的 server_id 不同。这就是 MySQL 复制知道执行该 SQL 语句是安全的方式。如果实施循环(Master-Master,MultiMaster)复制,则此规则是必要的。
在 sql 命令行中使用 select @@server_id;
来检查服务器上的配置。
2) 确保 Slave 的 /etc/my.cnf 确实设置了 server_id
原因如下:与 #1 中的原因相同
3) 确保Master的/etc/my.cnf中的server_id与Slave的/etc/my.cnf中的server_id不同
原因如下:与 #1 中的原因相同
附带说明:如果您设置多个从属服务器,请确保每个从属服务器具有与其主服务器及其兄弟从属服务器不同的 server_id。
原因如下:示例
具有 2 个从属设备的主设备
MASTER 具有 server_id 1
SLAVE1 具有 server_id 2
SLAVE2 具有 server_id 2
复制将在 SLAVE2 上变得非常缓慢,因为同级从属服务器具有相同的 server_id。事实上,它会稳步落后,休息一下,处理几条SQL语句。这是主服务器的错,因为它拥有一个或多个具有相同 server_id 的从服务器。这是一个在任何地方都没有真正记录的问题。在我的一生中,我已经看过几十次了。