美文网首页
MySQL的Binlog的格式和XA事务

MySQL的Binlog的格式和XA事务

作者: 雁阵惊寒_zhn | 来源:发表于2020-10-23 13:48 被阅读0次

Binlog的格式

MySQL Binlog具有三种格式:

  1. Statement
    基于SQL语句的模式。每一条会修改数据的SQL都会记录在Binlog中。只记录SQL语句减少了日志量。但是在主从同步过程中,因为主从服务器环境可能存在的差异会导致一些SQL语句执行结果不同,这就需要Binlog还必须记录每条语句在执行时候的一些相关信息,去保证主从服务器得到相同的结果。
  2. Row
    基于行的模式。不记录修改数据的SQL语句,仅保存哪条(行)记录被修改。克服了Statement模式中主从服务器执行结果可能不同的问题。但是,保存每行记录的修改可能会产生大量的日志内容,比如一条update语句就可能产生多条修改记录。Row模式的日志量会比Statement模式的大很多。
  3. 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事务包括三个组件:

  1. AP(Application Program):应用程序。
  2. RM(Resource Manager):资源管理器,事务的参与者。
  3. TM(Transaction Manager):事务管理器,创建分布式事务并协调分布式事务中的各个子事务。

两阶段提交:

  1. 第一阶段TM向RM发送事务准备的消息。
  2. 第二阶段TM向RM发送提交或回滚消息。

MySQL XA事务执行流程:

  1. 开始XA事务。
  2. 多条SQL命令SELECT、INSERT、UPDATE、DELETE等。
  3. 结束XA事务,接下来进行两阶段提交。
  4. 准备执行事务。
  5. 提交或回滚事务。

相关文章

网友评论

      本文标题:MySQL的Binlog的格式和XA事务

      本文链接:https://www.haomeiwen.com/subject/wbpepktx.html