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