关于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里吗,这样不会造成某种“死循环”吗?

  1. 这种情况会写到binlog里面吗?
  2. 如果会,它又是如何规避“死循环”的?
写回答

1回答

神思者

2023-08-06

在双主结构中,如果 A 库数据变化了,同步到 B 库后,B 库数据也发生了变化,会在 B 库也会产生 bin 日志记录,那么 A 库监控到了后,又会根据逻辑,改变 A 库数据,产生新的 A 库 bin 日志,这样导致了两个库的死循环。实际上并不会。如果查看 bin 日志的内容,我们会发现,bin 日志每一条都记录了这条日志产生的 server id ,系统监控到对方数据变化的 bin 日志的时候,如果发现这条日志的原始的 servier id 是自己,就不会做任何操作。所以在这种 MySQL 集群中,必须设置 server id ,并且不能相同。

2
1
demonCry
非常感谢!
2023-08-06
共1条回复

SpringBoot+Vue3+MySQL集群 开发大健康体检双系统

SpirngBoot+Vue3+ MySQL集群 开发大健康体检双系统

319 学习 · 213 问题

查看课程