关于mysql配置文件里的 log-slave-updates 配置项
来源:2-8 搭建双主四从的MySQL集群(二)

demonCry
2023-08-06
[mysqld]
#数据库字符集
character_set_server = utf8
#MySQL编号(只可以是数字)
server_id = 1
#开启binlog日志,规定日志文件名称
log_bin = mysql_bin
#开启relaylog日志,规定日志文件名称
relay_log = relay_bin
#从库的写操作是否写入binlog日志
log-slave-updates = 1
#采用严格的SQL语句模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
老师这里将 log-slave-updates 启用了,
我有个疑问就是如果MySQL_1作为MySQL_4的从节点,这里开启 log-slave-updates 配置后,
如果MySQL_1现在是在同步MySQL_4的binlog从而正在执行inser、delete、update这些操作,
那。。。这些操作也会由于 log-slave-updates = 1 的原因而被记录在自己的binlog里吗,这样不会造成某种“死循环”吗?
- 这种情况会写到binlog里面吗?
- 如果会,它又是如何规避“死循环”的?
写回答
1回答
-
在双主结构中,如果 A 库数据变化了,同步到 B 库后,B 库数据也发生了变化,会在 B 库也会产生 bin 日志记录,那么 A 库监控到了后,又会根据逻辑,改变 A 库数据,产生新的 A 库 bin 日志,这样导致了两个库的死循环。实际上并不会。如果查看 bin 日志的内容,我们会发现,bin 日志每一条都记录了这条日志产生的 server id ,系统监控到对方数据变化的 bin 日志的时候,如果发现这条日志的原始的 servier id 是自己,就不会做任何操作。所以在这种 MySQL 集群中,必须设置 server id ,并且不能相同。
212023-08-06
相似问题