假设 MySQL 5.5 中基于语句的复制和基于行的复制的混合复制。它在主主场景中究竟是如何工作的?
收到查询的master是否执行,然后将语句写入binlog,然后转发到slave上执行?还是 master 只是简单地写下应该更新的内容,然后 slave 拿起更改?
它还指出,在 MySQL 5.5 中,SBR 是默认设置,但在需要时会切换到 RBR。我怎么知道什么时候需要它?有没有办法强制它只对一个查询 UPDATE 或 INSERT 使用 SBR?
假设 MySQL 5.5 中基于语句的复制和基于行的复制的混合复制。它在主主场景中究竟是如何工作的?
收到查询的master是否执行,然后将语句写入binlog,然后转发到slave上执行?还是 master 只是简单地写下应该更新的内容,然后 slave 拿起更改?
它还指出,在 MySQL 5.5 中,SBR 是默认设置,但在需要时会切换到 RBR。我怎么知道什么时候需要它?有没有办法强制它只对一个查询 UPDATE 或 INSERT 使用 SBR?
MySQL 中的主/主复制没有什么特别之处——它是双向的主/从,每个服务器只是另一个服务器的从属。否则,它的行为与“常规”主/从拓扑完全相同。关于如何保护此配置免受重复主键的影响,有一些建议,例如设置
auto_increment_offset
andauto_increment_increment
,只写入一个主键(运行主动/被动),并确保log_slave_updates
已设置。所以,主/主只是两个方向的主/从。您的下一个问题是关于复制的一般工作原理,您应该阅读以下内容:复制实施细节。
总之:
您可以在 SHOW SLAVE STATUS 和进程列表中看到 I/O 线程和 SQL 线程都处于活动状态。
在 MySQL 5.5 中,默认是基于语句的复制。(见复制格式)
您指的是混合二进制日志记录格式,它通常使用 SBR,但在 SBR 被认为不安全的许多情况下切换到 RBR,因为该语句可能在主服务器和从服务器上产生不同的结果。这些在文档中都有清楚的描述。
因为 SBR 是默认设置,为了使用 MIXED,您必须明确设置它以
my.cnf
进行持久更改:或通过执行动态
如果您想
binlog_format
为特定语句设置,您可以通过在会话中设置 binlog_format(如上所示)然后执行您的语句。但是,您必须拥有 SUPER 特权才能做到这一点,这是任何应用程序都不应该拥有的。实际上,除了某些管理任务之外,几乎没有理由这样做,而混合复制应该是您的选择。