Mysql认为Master和Slave有相同的server-id

tar*_*eld 6 mysql replication

我一直在建立master->slave_a->slave_b关系,但遇到了一些麻烦。我目前的master->slave_a复制工作正常。

除了主机名设置之外,两个从站均具有完全相同server-id的配置。当我尝试启动从站时,slave_b会弹出以下错误:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
Run Code Online (Sandbox Code Playgroud)

我真的不明白,因为我拥有相距数英里的所有服务器 ID 1->2626->2629(m->s->s)。

我将它们设置在我的/etc/mysql/conf.d/replication.cnf文件中 - 它似乎被包含在内,但我不知道如何检查 mysql 正在获取哪个服务器 ID。

预先感谢:) 汤姆。

Rol*_*DBA 4

Master 的 server_id 与其执行完成的每个查询一起记录在其二进制日志中。要查看二进制日志中的这些 server_id 值,您可以针对任何二进制日志运行mysqlbinlog

由于 Master -> Slave_A 工作正常,因此您可以执行以下操作来清理 Slave_A 和 Slave_B 之间的内容:

在 Slave_A 上,在 mysql 中运行以下命令:

mysql> STOP SLAVE;
mysql> RESET MASTER;
Run Code Online (Sandbox Code Playgroud)

在Slave_A上,在操作系统中运行以下命令:

$ echo "STOP SLAVE;" > /root/MyData.sql
$ mysqldump -u... -p... --master-data=1 --routines --triggers --all-databases >> /root/MyData.sql
$ echo "START SLAVE;" >> /root/MyData.sql
$ mysql -hSlave_B -u... -p... -A < /root/MyData.sql
Run Code Online (Sandbox Code Playgroud)

在 Slave_A 上,在 mysql 中运行以下命令:

mysql> START SLAVE;
Run Code Online (Sandbox Code Playgroud)

这将使 Slave_B 关注 server_id 的正确值,并重新建立 MySQL 复制。

顺便说一句,您需要确保 Slave_B 上禁用二进制日志记录,因为对于 Slave 来说没有必要,除非 Slave_B 将成为某个其他 Slave 的 Master。