【Mysql】日志
undo log
定义
记录事务执行操作前的数据,用于事务的回滚操作,确保了事务的原子性。同时也应用于MVCC中定位查询语句可见的记录
运用
- insert语句 :undo log就记录下insert插入记录的主键id,这样回滚时通过id可以将这条记录删除
- update语句:记录下update所操作的记录的字段的旧值,回滚时,恢复旧值即可
- delete语句:记录下delete操作的记录,回滚时,insert该条记录
注意点
每一条undo log记录会先保存至buffer pool中的undo log页面,时机合适(间隔一段时间)将undo log页面刷回磁盘
redo log
定义
因为事务提交后,修改的数据是保存在buffer pool中的数据页当中,也就是脏页,但因为IO耗时的原因,脏页并不会马上刷盘。因此,在这期间,如果数据据崩溃,就会造成提交的事务中对数据的修改的丢失。所以,引入了redo log,将每一次提交的事务对数据的修改保存在redo log中,redo log会保存至redo log buffer当中,根据一定的规则将redo log以顺序写的形式写回磁,确保了事务提交后的持久性
注意点
磁盘中存放redo log的文件有大小限制,当文件满时,就需要对没用的数据进行覆盖。而数据是否有用则取决于对应的数据页(脏页)是否落盘,对那些已经落盘的数据可以清理,避免文件不够用
bin log
定义
bin log存储了所有数据表结构变更和数据表数据修改的操作,主要用于主从复制和备份恢复
注意点
bin log采取的是追加写的备份形式,一个bin log文件写满了,就再新建一个,也正因此,bin log保存了数据库中所有数据变更的内容,也因此可以用于主从复制的全量复制以及备份恢复