当启动Binlog后,事务会产生Binlog Event,这些Event被看做事务数据的一部分。因此要保证事务的Binlog Event和InnoDB引擎中的数据的一致性。所以带Binlog的CrashSafe要求MySQL宕机重启后能够保证:

- 所有已经提交的事务的数据仍然存在。

- 所有没有提交的事务的数据自动回滚。

- 所有已经提交了的事务的Binlog Event也仍然存在。

- 所有没有提交事务没有记录Binlog Event。

这些要求很好理解,如果重启后数据还在,但是Binlog Event没有了,就没办法复制到其他节点上了。如果重启后,数据没了,但是Binlog Event还在,那么不存在的数据就会被复制到其他节点上,从而导致主从的不一致。

为了保证带Binlog的CrashSafe,MySQL内部使用的两阶段提交(Two Phase Commit)。

2 - MySQL的Two Phase Commit(2PC)

在开启Binlog后,MySQL内部会自动将普通事务当做一个XA事务来处理:

- 自动为每个事务分配一个唯一的ID

- COMMIT会被自动的分成Prepare和Commit两个阶段。

- Binlog会被当做事务协调者(Transaction Coordinator),Binlog Event会被当做协调者日志。

想了解2PC,可以参考文档:【https://en.wikipedia.org/wiki/Two-phase_commit_protocol。】

- 分布式事务ID(XID)

使用2PC时,MySQL会自动的为每一个事务分配一个ID,叫XID。XID是唯一的&#

mysql自动生成回滚语句_如何根据sql语句逆向生成回滚语句?相关推荐

  1. mysql查询问题sql语句_询问一个SQL查询语句的有关问题,MYSQL的,来看看吧

    询问一个SQL查询语句的问题,mysql的,来看看吧! 我的SQL语句如下 日中三个表数据量分别为 1700 13000 34 这样查询要40秒才会出来结果(我远程连的服务器MYSQL). 我表示压力 ...

  2. mysql注入如何读取本地文件_如何通过SQL注入获取服务器本地文件

    写在前面的话 SQL注入可以称得上是最臭名昭著的安全漏洞了,而SQL注入漏洞也已经给整个网络世界造成了巨大的破坏.针对SQL漏洞,研究人员也已经开发出了多种不同的利用技术来实施攻击,包括非法访问存储在 ...

  3. java存储过程与sql语句_存储过程与SQL语句怎么选择

    应用存储过程的优点: 1.具有更好的性能 存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译, 而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以提高数据库执行速 ...

  4. java break语句_跟我学java编程—Java跳转语句—break语句

    有时可能不知道循环将要执行的次数,终止循环的条件可在以后确定,所以需要提供一种机制在条件满足的时候跳出循环.有时候,我们需要根据条件跳过循环中的一些语句.Java语言提供了break和continue ...

  5. pdm生成mysql sql语句_如何用Powerdesigner的PDM生成数据库

    展开全部 工具: Sybase PowerDesigner 15.1 Microsoft SQL Server 2005 第一步概要设计: 打开PowerDesigner软件,设计"概念数据 ...

  6. mysql自动添加多条数据_用一条mysql语句插入多条数据

    这篇文章主要介绍了在mysql中使用一条sql语句插入多条数据,效率非常高,但是原理其实很简单,希望对大家有所帮助 假如有一个数据表A: id name title addtime 如果需要插入n条数 ...

  7. mysql中的级联删除的语句_级联删除sql语句-数据库级联删除语句-sql删除语句

    SQl语句的级联删除问题 删除应该有顺序 1,删除link表 delete from ref,link where ref.link_code=link.link_code and link_id=? ...

  8. 查看mysql某人执行了什么语句_一条 SQL 语句是如何在 MySQL 中执行的

    MySQL分为Server层和存储引擎层. Server层包括连接器.查询缓存.分析器.优化器.执行器等,涵盖MySQL的大多数核心功能,以及所有的内置函数(如时间.日期.数学和加密函数等),所有跨存 ...

  9. python创建数据库的sql语句_对python插入数据库和生成插入sql的示例讲解

    如下所示: #-*- encoding:utf-8 -*- import csv import sys,os import pymysql def read_csv(filename): ''' 读取 ...

最新文章

  1. 苹果手机各种型号图片_洪湖苹果X尾插华强北档口诚信收购
  2. h5ai搭建自己的文件分享程序
  3. 通过QML定义对象类型
  4. .Net Core实现的文档数据库RavenDb
  5. C语言 | 函数执行成功时,return 1 还是return 0?
  6. 【报告分享】企鹅智家智慧社区解决方案2019.pdf(附下载链接)
  7. vue实现垂直无限滑动日历组件
  8. windows安装docker环境并配置镜像
  9. 调用百度语音合成API,Qt实现语音合成,Qt语音合成
  10. html用图片链接网址
  11. git+github+jenkins自动发布
  12. asp.net MVC三层结构代码生成器
  13. 数分下第4讲 (8.2节): 平面和直线
  14. 2016互联网金融安全峰会报名
  15. 服务器攻击后的善后工作
  16. 第57期:LPWAN技术之超窄带(UNB)浅析
  17. 金属所等在天然生物材料力学理论研究中取得进展
  18. 高效学习方法和工具推荐,让你事半功倍!
  19. linux下最简单多线程单文件socks5代理proxy服务器程序(仅一个c文件,带详细注解)
  20. 决策树算法python实现

热门文章

  1. HTML文本框自动显示当前年月日
  2. nfs-ganesha 编译选项
  3. 机柜能开计算机网络设备吗,一种智能的计算机网络机柜的制作方法
  4. BIOS密码清除方法
  5. MySQL与Hadoop数据同步方案:Sqoop与Flume的应用探究【上进小菜猪大数据系列】
  6. Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花
  7. Touch_GUI(基于STM32触摸屏)
  8. Pixhawk无人机教程-8.1 在Mission Planner中下载与分析日志(转载)
  9. AirDisk存宝 NAS系列的设备使用须知
  10. 【渗透测试】渗透测试实施一般步骤