我一直在建立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。
预先感谢:) 汤姆。
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。