Binlog的格式
MySQL Binlog具有三种格式:
-
Statement:
基于SQL语句的模式。每一条会修改数据的SQL都会记录在Binlog中。只记录SQL语句减少了日志量。但是在主从同步过程中,因为主从服务器环境可能存在的差异会导致一些SQL语句执行结果不同,这就需要Binlog还必须记录每条语句在执行时候的一些相关信息,去保证主从服务器得到相同的结果。 -
Row:
基于行的模式。不记录修改数据的SQL语句,仅保存哪条(行)记录被修改。克服了Statement模式中主从服务器执行结果可能不同的问题。但是,保存每行记录的修改可能会产生大量的日志内容,比如一条update语句就可能产生多条修改记录。Row模式的日志量会比Statement模式的大很多。 -
Mixed:
是Statement模式和Row模式的混合模式。既然两种模式各有优缺点,那么不妨都取其优点组合成一个混合的模式。一般的语句修改使用Statement模式保存Binlog,如一些函数,Statement模式无法保证主从复制操作一致,采用Row模式进行保存。MySQL根据执行每一条具体的SQL语句来区分记录的日志格式,在Statement模式和Row模式之间选择一种。
XA事务
MySQL的XA事务根据Distributed Transaction Processing: The XA Specification规范实现的,执行全局事务的过程通过两阶段提交(Two-Phase Commit,2PC)实现。目前MySQL中仅Innodb存储引擎支持MySQL XA事务。2PC可参考分布式一致性——2PC和3PC。
XA事务包括三个组件:
- AP(Application Program):应用程序。
- RM(Resource Manager):资源管理器,事务的参与者。
- TM(Transaction Manager):事务管理器,创建分布式事务并协调分布式事务中的各个子事务。
两阶段提交:
- 第一阶段TM向RM发送事务准备的消息。
- 第二阶段TM向RM发送提交或回滚消息。
MySQL XA事务执行流程:
- 开始XA事务。
- 多条SQL命令SELECT、INSERT、UPDATE、DELETE等。
- 结束XA事务,接下来进行两阶段提交。
- 准备执行事务。
- 提交或回滚事务。
网友评论