MySQL 相关日志介绍

一. Redo Log

Redo LogInnoDB存储引擎层的日志,和大多数关系型数据库一样,InnoDB记录了对数据文件的物理更改,并保证总是日志先行,也就是所谓的WAL,即在持久化数据文件前,保证之前的redo日志已经写到磁盘。

Redo log文件以ib_logfile[number]命名,以顺序的方式写入文件,写满时则回溯到第一个文件,进行覆盖写。

Redo Log 作用:

  1. 保证事务的持久性,即只要事务提交后数据就固化在磁盘,不会丢失。
  2. 以顺序追加的方式记录Redo Log,从而改善性能。
  3. MySQL 非正常关闭启动后根据Redo Log 恢复已经提交数据。

二. Undo Log

Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用于实现多版本并发控制(MVCC)。

MVCC: Undo记录中存储的是老版本数据,当一个旧的事务需要读取数据时,为了能读取到老版本的数据,需要顺着undo链找到满足其可见性的记录。MVCC可以实现读写不冲突这一个特性,极大的提高数据库性能,以至于现在主流的数据库基本都实现了MVCC(除了SQL SERVER,默认隔离级别下不能实现MVCC,所以才会经常出现阻塞!!!)。

Undo log 作用:

  1. 保证事务的原子性,即事务中的所有操作必须全部完成或者全部回滚。
  2. 实现了MVCC特性,提高数据库的并发性。
  3. MySQL 非正常关闭启动后根据Undo log 回滚未提交的数据。

三. BinLog

BinLogMySQL Server层记录的二进制日志文件,用于记录MySQL的数据更新或者潜在更新(比如DELETE语句执行删除而实际并没有符合条件的数据),select或show等不会修改数据的操作不会记录在binlog中。

BinLog 作用:

  1. 实现主从复制功能。
  2. 用来查看数据库的变更历史(具体时间点变更操作)。
  3. 用于数据恢复,闪回某段时间的数据或是结合备份恢复数据到某一时刻(binlog的数据恢复都是需要人为干预的,并非像undo、redo一样是MySQL自动维护的)
  4. 用于增量备份。

RedologBinLog 都是记录SQL变化的源数据,为什么不用Redolog来实现主从复制呢?主要原因是MySQL的特点就是支持多存储引擎,为了兼容绝大部分引擎来支持复制这个特性,那么自然要采用MySQL Server层记录的日志而不是仅仅针对InnoDB的Redolog,因为如果采用了InnoDB Redolog复制,那么其他引擎也想复制,此时该怎么办呢?

四. SlowLog

慢查询日志(SlowLog)记录MySQL中响应时间超过指定阀值的SQL语句,运行时间超过long_query_time值的SQL,会被记录到慢查询日志中。SQL性能调优时,才会暂时开启。

五. ErrorLog

错误日志(ErrorLog)记录了MySQL数据库启动关闭信息,以及服务器运行过程中所发生的任何严重的错误信息。通常,当MySQL无法正常启动或者发生Crash,首先想到的就是查看错误日志,从日志中我们可以找错误信息,以此来排查问题。

六. General Log

一般查询日志(General Log)记录服务器从客户端接收的所有命令,以接收的顺序将其记录在日志中。这个日志对性能的影响比较大,毕竟将所有的命令都记录了下来,只有在排查个别问题时,才会暂时打开。

图例:

posted @ 2018-09-06 09:58  Xuty  阅读(384)  评论(0编辑  收藏  举报