加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中的行复制

发布时间:2016-10-02 20:50:23 所属栏目:MySql教程 来源:站长网
导读:MySQL基于行的复制可以最大化保证主从复制的一致性,对于RBR(基于行复制) 和SBR(基于语句复制),相信大家已经很熟知,下面记录的是行复制在二进制日志总记录的情况。 基于行的复制是与位置相关的,binlog里面只记录相关表发生改变的列的数据。其中引入

MySQL基于行的复制可以最大化保证主从复制的一致性,对于RBR(基于行复制) 和SBR(基于语句复制),相信大家已经很熟知,下面记录的是行复制在二进制日志总记录的情况。

基于行的复制是与位置相关的,binlog里面只记录相关表发生改变的列的数据。其中引入了四个新的事件: Table_map, Write_rows,Delete_rows,Update_rows.

一条语句执行后,在binlog里面,Table_map事件中包含表ID,和列的类型(没有列名,slave 可以利用这些信息对比和master上的表结构是否一致),后面跟着其他三个事件,结束标志为STMT_END_F.

事件在slave 端执行过程:

1、SQL线程从中继日中读取各个事件。

2、对与Table_map事件,SQL线程将提取出表信息,保存表的定义

3、锁定要改变的表,并检查master和slave上表结构是否一致。

4、如果表schema不一致,则停止复制,否则继续执行行事件,直至遇到结束标志符:STMT_END_F.

本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

对于Update_rows和Delete_rows事件,SQL线程要先定位到具体的行,查找操作的步骤:

1、主键或者

优先选择slave上的主键。这是最好的办法。当找到匹配的主键值的时候,就认为已经找到匹配的行,行的其他列的内容则不去匹配。

2、非空唯一索引扫描

这个也只比较键值

3、其他索引或者全表扫描

此时会比较整个行的数据在master和slave上是否一致(确实能保证主从复制的一致性,但也是最慢的)

具体测试数据请参考

http://www.mysqlops.com/2011/06/07/mysql-replication-data-consistency.html

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读