前言
对于开发者而言大部分情况只需要关注数据库的sql就可以了,但个别情况下了解数据库的日志信息能够帮我们更好的定位一些问题。
MYSQL的日志种类
1. redo log(重做日志) indodb 引擎
2. undo log(回滚日志)indodb 引擎
3. binlog(二进制日志)
4. relay log(中继日志)
5. error log(错误日志)
6. slow query log(慢查询日志)
7. general log(一般查询日志)
详细描述
redo log
内容:物理格式日志 记录录的是物理数据页面的修改的信息
redo log是MYSQL保证持久性的重要组成部分,那么他是如何保证事务的持久性呢?看下下图。
上图为sql在执行过程中的流程。在事务开始后redo log 会开始记录对应的数据页修改前的信息。这个时候redo log 信息会通过innodb 的innodb log buf (默认8M)记录到缓存中。这个时候日志信息不一定会落入磁盘。当缓存满了之后log buf 会刷入redo log 磁盘文件并清空log buf .之后执行sql如果发生信息变更的话会将信息刷入buf pool中。通过线程的方式将buf pool的信息随机刷入磁盘文件中(以页为单位,mysql中默认页的大小为16KB)最后在事务提交后redo log 会进行一个落盘的操作以及在开启binlog的前提下binlog也会记录本次sql信息。双重保证数据库的持久性。
undo log
内容:逻辑格式日志(记录sql)
Undo log是InnoDB MVCC事务特性的重要组成部分。当我们对记录做了变更操作时就会产生undo记录,Undo记录默认被记录到系统表空间(ibdata)中,但从5.6开始,也可以使用独立的Undo 表空间。
在事务开始前会记录当前版本信息。之后开始记录本次事务的sql附上版本信息。当事务发生异常后可以根据版本信息进行相应的回滚操作。
binlog
内容:逻辑格式日志(记录sql)
用于复制,在主从复制中,从库利用主库上的binlog进行重播,实现主从同步。用于数据库的基于时间点的还原。
事务提交的时候,一次性将事务中的sql语句(一个事物可能对应多个sql语句)按照一定的格式记录到binlog中。
relay log
内容:逻辑格式(sql)
从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后从服务器SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致
ps: 主从复制的几种不同方式