MySQL的的redo log、、undo log、、binlog
文章目录文章目录一、MySQL日志文件类型二、几种日志的对比2-1、用途 redo log undo log binlog2-2、存储内容、格式 redo
log undo log binlog2-3、日志生成 redo log undo log binlog2-4、删除策略 redo log undo log binlog2-5、redo log 与
binlog 的区别三、两阶段提交
一、一、MySQL日志文件类型日志文件类型
重做日志(redo log)
回滚日志(undo log)
二进制日志(binlog)
错误日志(errorlog)
慢查询日志(slow query log)
一般查询日志(general log)
中继日志(relay log)
其中,比较重要的包括 redo log 、 undo log 和 binlog。
redo log 是重做日志,提供前滚操作;undo log 是回滚日志,提供回滚操作。
二、几种日志的对比二、几种日志的对比
2-1、用途、用途
redo log
确保事务的持久性。
如果在发生故障的时间点(比如系统宕机),尚有数据未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从
而达保证事务的持久性。
undo log
首先明确undo log绝对不是redo log的逆过程。它可以保存事务发生之前的数据的一个版本,可以用于回滚,同时可以提供
多版本并发控制(MVCC)下的读。
binlog
1. 用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。
2. 用于数据库的基于时间点的还原。
2-2、存储内容、格式、存储内容、格式
redo log
物理格式的日志,记录的是物理数据页面的修改的信息(数据库中每个页的修改),面向的是表空间、数据文件、数据
页、偏移量等。
undo log
逻辑格式的日志,在执行undo的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,
与redo log不同。
binlog
逻辑格式的日志,可以简单认为就是执行过的事务中的sql语句。
但又不完全是sql语句这么简单,而是包括了执行的sql语句(增删改)反向的信息。比如delete操作的话,就对应着delete
本身和其反向的insert;update操作的话,就对应着update执行前后的版本的信息;insert操作则对应着delete和insert本身的
信息。
因此可以基于binlog做到闪回功能。
2-3、日志生成、日志生成
redo log
事务开始之后就产生redo log,redo log的落盘并不是随着事务的提交才写入的,而是在事务的执行过程中就开始写入。在
发出事务提交指令时,先保证缓存中的redo log写入完毕,才执行提交动作。
undo log
事务开始之前,根据当前版本的数据生成undo log;产生undo日志的时候,同样会伴随类似于保护事务持久化机制的redo
log的产生。