MySQL里的日志文件
binary log
binary log记录了对Mysql数据库执行更改的所有操作(逻辑日志,不包含select,show这类没有对数据有修改的操作)。它是在存储引擎上层的数据库server层产生的。
binary log的作用:
- 恢复
- 复制
- 审计,用户可以通过binary log中的信息进行审计。
- 当开启一个事务时,所有未提交的binary log会被记录到一个缓存里。
- 等事务提交时直接将缓存的binary log写入binary log文件里(磁盘)。
binary log的格式:
- statement,基于SQL,如果存在uuid等函数会出现主从服务器上数据不一致。
- row,记录行更改情况。
- mixed,在此格式下,默认使用statement格式进行记录,但出现uuid等函数时会调整为row格式。
redo log被称为InnoDB存储引擎的日志文件。通常是物理日志,记录的是页的物理修改操作。
redo log的作用:
- 保证事务的原子性与持久性
- 先写入一个重做日志缓冲。
- 按照一定条件顺序地写入日志文件
- 主线程每秒会将重做日志缓冲写入磁盘的重做日志文件中。
- 由参数innodb_flush_log_at_trx_commit控制,表示在事务提交操作时处理重做日志的方式。
- binary log记录的是与数据库所有有关的日志,包含InnoDB等其它存储引擎的日志;redo log只记录与存储引擎相关的事务日志。
- binary log记录的都是关于一个事务的具体操作内容,是逻辑日志;redo log记录的是关于每个页更改的物理情况,是物理日志。
- 写入时间不同,binary log仅在事务提交前进行提交,只写磁盘一次,不论事务多大;而在事务进行过程中,会有多条redo log写入。
- 当事务提交时InnoDB存储引擎进行准备操作。
- mysql数据库上层写入二进制日志。
- InnoDB引擎层将日志写入重做日志文件。
事务有时还需要进行回滚操作,这时就需要undo log
undo log保证事务的一致性,进行事务的回滚及MVCC功能的实现。
文章主要参考:《mysql技术内幕》,及详细分析MySQL事务日志(redo log和undo log)
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量