MySQL6大日志类型详解

MySQL的6种日志文件分别是:redo log(重做日志)、undo log(回滚日志)、binlog(二进制日志)、errorlog(错误日志)、slow query log(慢查询日志)、general log(一般查询日志)、relay log(中继日志)

一、redo log(重做日志)

1、作用
    确保事务的持久性,防止在发生故障的时间点,有数据没有写入磁盘,再重启MySQL服务的时候,通过redo log进行重做,从而达到事务的持久性
2、内容
    物理格式的日志,记录的是物理数据页面的修改信息(在某个数据页上做了什么修改)
3、什么时候产生
    事务开始之后就产生redo log日志,redo log的写入并不是随着事务的提交才写入的,而是在事务的执行过程就开始写入
4、什么时候结束
    当对应事务的数据都写入到磁盘后,redo log也就完成了
5、其他说明
    为什么redo log日志写入磁盘文件的时机是逐步写入的,因为redo log日志有一个缓存区,innodb是先将日志写入缓存区,然后再通过3种方式写入磁盘文件
    方式1:Master Thread 每秒一次执行刷新Innodb_log_buffer到redo log文件。
    方式2:每个事务提交时会将redo log刷新到redo log文件。
    方式3:当缓存区的空间少于一半时,会将redo log日志刷新到redo log文件中。

二、undo log(回滚日志)

1、作用
    保存了事务发生之前的数据的一个版本,可以用于回滚,同时也提供MVCC的读(快照读),即非锁定读
2、内容
    逻辑格式的日志,在执行回滚操作时,仅仅是从逻辑层面上恢复到事务开始之前的状态,不是从物理层面操作
3、什么时候产生
    当事务开始之前,会根据当前版本生成undo log日志,产生undo log时也会产生redo log来保证undo log的可靠性
4、什么时候释放
    当事务提交之后,undo log不会立刻删除,而是放入待清理的链表中,由purge线程根据其他事务是否可见来决定删不删除

三、bin log(二进制日志)

1、作用
    用于复制,在主从复制中,从库利用主库上的bin log文件重播,实现主从同步。用于数据库的基于时间点的还原
2、内容
    逻辑格式日志,可以简单认为就是执行过的事务中SQL语句

 未完待续...

原文地址:https://www.cnblogs.com/chenhaoyu/p/14570880.html