MYSQL 日志 及其作用
- Mysql 的三大日志 bin log,redo log ,undo log
- bin log (二进制日志)又称 逻辑日志
- bin log 用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存磁盘中,是mysql 的逻辑日志,由server层进行记录,任何存储引擎的mysql 数据库都会记录 binlog 日志
- 逻辑日志:可以简单理解为记录的就是sql 语句
- 物理日志:因为mysql 数据做种是保存在数据页中的,物理日志记录的就是数据页的变更
- binlog 是通过追加的方式进行写入的,可以通过max_binlog_size 参数设置每个binlog文件的大小,当文件大小达到给定的值之后,会生成心得文件来保存日志
- 主要是在主从复制和数据恢复的时候使用,每次提交事务的时候都都会记录 binlog
- 事务日志(redo log和undo log)
- 关系型数据的四大特性包括 原子性,一致性,隔离性持久性(ACID)
- redo log(重做日志)
- redo log 本质是记录一下事务对数据库做了那些操作
- 事务的持久性是通过redo log来实现的 事务的隔离性是通过读写锁+MVCC机制来实现的
- redo日志占用的空间非常小: 存储表空间ID、页号、偏移量以及需要更新的值所需的存储空间是很小的。
- redo日志是顺序写入磁盘的: 在执行事务的过程中,每执行一条语句,就可能产生若干条redo日志,这些日志是按照产生的顺序写入磁盘的,也就是使用顺序IO。
- redolog日志是物理日志,保存了数据库中的值。
- undo log
- undo log 主要是 做回滚日志,保证原子性
- 原子性是指对数据库同一系列操作,要么全部成功,要么全部失败,不可能处理部分成功的情况,原子性的底层就是通过undolog 实现的
- undo log 也是 MVCC(多版本并发控制)实现的关键
- bin log (二进制日志)又称 逻辑日志