Mysql的日志系统是Mysql保证无论何时崩溃数据都不会丢失的关键
众所周知Mysql是持久化的数据库, 所有的数据都是持久化到硬盘中的, 保证数据不会丢失
Mysql保证数据不会丢失是从以下两个方面来体现的
MySQL保证以上两个点的关键就是通过 undo log, redo log 和 binlog 这三个日志来实现的, 接下来将逐一介绍
undo log是Mysql的回滚日志, 存储的是老版本的数据
存储老版本的数据
用于在事务执行失败的时候回滚到事务开始前的版本
undo log 有两种类型
对于 insert 命令, undo log 记录的是新增的记录的主键, 在回滚的时候根据 undo log 中的主键去删除对应的记录即可
对于 update / delete 命令, undo log 记录的是被修改的记录的旧数据
Mysql中的每一行数据都有一个最新修改当前数据行的事务id和回滚指针这两个字段, 当对数据行进行修改之后, undo log指针就会指向旧的这一行数据, 而新生成的这一行数据的回滚指针就会指向undo log指针当前指向的旧数据行

undo log是用于保证事务在未提交的时候可以顺利回滚到事务开始前的状态, 当事务提交之后undo log就失去作用了, 就需要被删除
undo log是交由Mysql中的 Purage 线程来负责删除的, purage会定期检查undo log中的deleted_bit 标志, 这个标志会在事务提交后被设置为true, pu