MySQL 的 XA 模式下的主从复制问题
来源:互联网 发布:自适应二值化算法 编辑:程序博客网 时间:2024/06/01 01:33
看mysql手册中关于 XA 模式下的行为描述时得知:
master节点执行xa prepare之后如果mysql crash了,当mysql被恢复时可以通过命令xa recover 找到之前未完成提交的xa 事务,并且通过xacommit进行提交。但是这种情况下,mysql是不会对这个xa事务记录binlog日志的。
之前看的时候还不是很明白为什么mysql要这么做,前几天测试mysql xa 模式下的主从复制时才明白这么做的原因。
测试中使用sysbench按照预先准备好的lua测试脚本,通过xa进行事务提交,所有的事务都是对测试表进行插入操作。
在sysbench压测过程中kill -9 master节点,然后停止sysbench脚本并恢复master节点,并xarollback所有master恢复时通过xa recover能够查询到的xa 事务。
最后对比master和slave的数据。
测试过程中master和slave配置了半同步复制,按照我的预期,master和slave的数据应该只会有一条不一致,并且应该是master比slave多1行数据。
但最后的测试结果居然是slave比master多1行。说明有一个xa事务在slave上提交了,而没有在master上提交。
通过查看并分析发现slave比master多的这行数据在master上进行提交的时候正好碰到了master 被kill-9,导致该xa事务没有完成,但这个xa事务已经写完binlog了。。。
这应该就是mysql为什么对xa recover出来的xa 事务提交时不记录binlog的原因,怕重复记录!
但这就很难保证master和slave的数据一致性了,因为故障的时候slave得到的binlog上的事务可能在master上还没提交。
特别是如果主从一致的策略是丢弃master故障时未同步到slave上的事务时,当master恢复的时候应该进行xacommit还是xa rollback需要先去 slave上查看下该xa事务的binlog是否已经同步过来了。
转载请注明转自高孝鑫的博客
之前看的时候还不是很明白为什么mysql要这么做,前几天测试mysql xa 模式下的主从复制时才明白这么做的原因。
测试中使用sysbench按照预先准备好的lua测试脚本,通过xa进行事务提交,所有的事务都是对测试表进行插入操作。
在sysbench压测过程中kill -9 master节点,然后停止sysbench脚本并恢复master节点,并xarollback所有master恢复时通过xa recover能够查询到的xa 事务。
最后对比master和slave的数据。
测试过程中master和slave配置了半同步复制,按照我的预期,master和slave的数据应该只会有一条不一致,并且应该是master比slave多1行数据。
但最后的测试结果居然是slave比master多1行。说明有一个xa事务在slave上提交了,而没有在master上提交。
通过查看并分析发现slave比master多的这行数据在master上进行提交的时候正好碰到了master 被kill-9,导致该xa事务没有完成,但这个xa事务已经写完binlog了。。。
这应该就是mysql为什么对xa recover出来的xa 事务提交时不记录binlog的原因,怕重复记录!
但这就很难保证master和slave的数据一致性了,因为故障的时候slave得到的binlog上的事务可能在master上还没提交。
特别是如果主从一致的策略是丢弃master故障时未同步到slave上的事务时,当master恢复的时候应该进行xacommit还是xa rollback需要先去 slave上查看下该xa事务的binlog是否已经同步过来了。
转载请注明转自高孝鑫的博客
0 0
- MySQL 的 XA 模式下的主从复制问题
- MySQL XA 事务支持调研
- MySQL xa 事务局限性
- mix和row模式下 mysql主从复制从节…
- MySQL主从复制错误 Got …
- buildbot + bazaar + mysql的测试…
- linux 下 /bin /sbin 的区别
- em的错误 <转载>
- mysql 配置主从
- MySQL模式 : Strict Mode
- mysql replication 主从…
- iOS UIscrollView的设计模式
- mysql time_out 时间的更改
- Mysql 安装失败的解决办法
- mysql replication 的搭建
- mysql union 的用法
- [转]Mysql 的 auto_increment 详解
- Mysql 中query cache 的代码导读
- postgre-xc 初步调研
- 如何在mysql中间件层实现客户端连…
- innodb monitor output&…
- FederatedX 下推语句调研
- mysql sysbench 测试
- MySQL 的 XA 模式下的主从复制问题
- 转:CentOS 6.4 编译安…
- 在centos/redhat6.5上编译Mariadb…
- JavaScript获取事件对象的注意点
- EBS值集定义
- MySQL分布式集群连接池低潮抖动问…
- CentOS 6.5 升级 elrepo-kernel-lt
- 转:用消息队列和消息应用状态表来…
- hdu1236排名(结构体)