MySQL数据库是如何实现XA规范的
MySQL 的一致性日志
如果 MySQL 数据库断电了,未提交的事务怎么办?
答案:依靠日志。
因为在执行一个操作之前,数据库会首先把这个操作的内容写入到文件系统日志里,然后再进行操作。当宕机或者断电的时候,即使操作并没有执行完,但是日志在操作前就已经写好了,我们仍然可以根据日志的内容来进行恢复。
MySQL InnoDB 引擎中和一致性相关的有重做日志(redo log)、回滚日志(undo log)和二进制日志(binlog)。
redo log
每当有操作执行前,在数据真正更改前会先把相关操作写入 redo 日志。这样当发生断电等意外导致后续任务无法完成时,待系统恢复后就可以继续完成这些更改。
undo log
和 redo 日志对应,也叫撤消日志,记录事务开始前数据的状态。
当一些更改在执行一半时发生意外而无法完成,就可以根据撤消日志恢复到更改之前的状态。
举个例子,事务 T1 更新数据 X,对 X 执行 Update 操作,从 10 更新到 20,对应的 Redo 日志为
binlog
是 MySQL sever 层维护的一种二进制日志,MySQL 最重要的日志之一,它记录了所有的 DDL 和 DML 语句,除了数据查询语句 select、show 等,还包含语句所执行的消耗时间。
binlog 与 InnoDB 引擎中的 redo/undo log 不同,主要目的是复制和恢复,用来记录对 MySQL 数据更新或潜在发生更新的 SQL 语句,并以事务日志的形式保存在磁盘中。
binlog 主要应用在 MySQL 的主从复制过程中,MySQL 集群在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 节点,再从节点回放来达到 master-slave 数据一致的目的。
你可以连接到 MySQL 服务器,使用下面的命令查看真实的 binlog 数据:
//查看binlog文件的内容 show binlog events; //查看指定binlog文件的内容 show binlog events in 'MySQL-bin.000001'; //查看正在写入的binlog文件 show master statusG //获取binlog文件列表 show binary logs;
您可能感兴趣的文章
- 05-31MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
- 05-31MySQL索引失效十种场景与优化方案
- 05-31MYSQL 高级文本查询之regexp_like和REGEXP详解
- 05-31MySQL获取binlog的开始时间和结束时间(最新方法)
- 05-31MySQL索引查询的具体使用
- 05-31基于MySQL和Redis扣减库存的实践
- 05-31关于MySQL的存储过程与存储函数
- 05-31MySQL实战文章(非常全的基础入门类教程)
- 05-31MySQL Flink Watermark实现事件时间处理的关键技术
- 05-31MySQL Flink实时流处理的核心技术之窗口机制
阅读排行
推荐教程
- 05-30Navicat for MySQL 11注册码激活码汇总
- 05-27Mysql误删数据快速恢复
- 05-31VS2022连接数据库MySQL并进行基本的表的操作指南
- 05-30解决seata不能使用mysql8版本的问题方法
- 05-30MYSQL字符集设置的方法详解(终端的字符集)
- 05-30解决MySQL启动报错:ERROR 2003 (HY000): Can't con
- 05-30关于Mysql-connector-java驱动版本问题总结
- 11-22mac下安装mysql忘记密码的修改方法
- 05-30MySQL中的隐藏列的具体查看
- 11-22mysql exists与not exists实例详解