MySQL SBR与RBR

假设在MySQL 5.5中基于语句的复制和基于行的复制的混合复制.它在master-master场景中究竟是如何工作的?

接收查询的主服务器是否执行然后将该语句写入binlog,然后将其中继到从服务器上以便执行?或者主人只是简单地写下应该更新的内容然后奴隶拿起变化?

它还声明在MySQL 5.5中SBR是默认值,但在需要时它会切换到RBR.我怎么知道什么时候需要它?有没有办法强制它只使用SBR一个查询UPDATE或INSERT?

解决方法:

MySQL中的主/主复制没有什么特别之处 – 它是双向主/从服务器,其中每个服务器只是另一个服务器的从服务器.否则,它的行为与“常规”主/从拓扑完全相同.关于如何从重复的主键保护此配置有一些建议,例如设置auto_increment_offset和auto_increment_increment,只写入一个主(运行主动/被动),并确保设置了log_slave_updates.

因此,master / master在两个方向上只是主/从.您的下一个问题是关于复制如何工作,您应该阅读:Replication Implementation Details.

综上所述:

>在主服务器上执行查询
>成功执行后,查询本身(SBR)或受影响的行(RBR)的二进制表示将与一些元数据一起写入本地二进制日志.
>在从站上,有一个运行的I / O线程连接到主站并流式传输主站的二进制日志,并将它们写入称为中继日志的本地文件.
>在从属上,SQL线程读取中继日志并执行包含的语句(SBR)/应用行(RBR)

您可以在SHOW SLAVE STATUS和进程列表中看到I / O线程和SQL线程都处于活动状态.

在MySQL 5.5中,默认是基于语句的复制. (见Replication Formats)

您所指的是Mixed Binary Logging Format,它通常使用SBR,但在SBR不被认为是安全的情况下切换到RBR,因为该语句有可能在主站和从站上有不同的结果.这些在文档中有清楚的描述.

因为SBR是默认值,所以为了使用MIXED,您必须在my.cnf中明确设置它以进行持久更改:

binlog_format = MIXED

或通过执行动态

-- 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;

如果要为特定语句设置binlog_format,可以在会话中设置binlog_format(如上所示),然后执行语句.但是,您必须拥有SUPER权限才能执行此操作,而应用程序不应具有该权限.实际上,除了某些管理任务之外,几乎没有理由这样做,并且MIXED复制应该是您的选择.

上一篇:最全MyBatis中XML映射文件标签分析+示例


下一篇:数据库集群及mysql高可用