面试冲刺:21---MySQL的日志文件你有了解吗?有哪些?redo log与bin log的区别是什么呢?
其他
2020-08-03 13:30:53
阅读次数: 0
一、MySQL的日志文件有哪些?
- MySQL常见的日志文件有:
- 错误日志(error log)
- 慢查询日志(slow query log)
- 查询日志(query log)
- 二进制文件(bin log)
- 重做日志(redo log)
- 回滚日志(undo log)
- 本文不讲解每个日志文件的具体细节,详情可参阅给出的每个链接
错误日志
慢查询日志
查询日志
二进制文件
- 二进制日志记录了对MySQL数据库执行更改的所有操作
- 若操作本身没有导致数据库发生变化,该操作可能也会写入二进制文件(但是不包括select、show这类操作,因为它们不会对数据库进行修改)
- 二进制的主要作用有:
- 恢复(recovery):些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制文件进行point-in-time的恢复
- 复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般称为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步
- 审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击
- 详情参阅:https://blog.csdn.net/qq_41453285/article/details/104110026
重做日志
- MySQL会将事务记录在重做日志中,用来保证事务的原子性和持久性
- 当事务提交(commit)的时候,必须先将事务的所有日志写入重做日志文件进行持久化,待事务的commit操作完成才算完成
- 当实例或介质失败时,重做日志文件就能派上用场。例如,数据库由于所在主机掉电导致实例失败,InnoDB存储引擎会使用重做日志文件恢复到掉电前的时刻,以此来保证数据的完整性
- 重做日志缓冲:
- 详情参阅:
回滚日志
二、redo log与bin log的区别是什么?
- 二进制日志其用来进行POINT-IN-TIME(PIT)的恢复以及主从复制(Replication)环境的建立。从表面上看其和重做日志非常相似,都是记录对于数据库操作的日志。然而,从本质上看,两者有着非常大的不同
不同点①
- 日志是在InnoDB存储引擎层产生
- 二进制日志是在MySQL数据库的上层产生的,并且二进制日志不仅仅针对于InnoDB而言,MySQL数据库中的任何存储引擎对于数据库的更改都会产生二进制日志
不同点②
- 两种日志记录的内容形式不同:
- 二进制日志是一种逻辑日志,其记录的是对应的SQL语句
- 重做日志是物理格式日志,其记录的是对于每个页的修改
不同点③
- 两种日志记录写入磁盘的时间点不同:
- 二进制日志只在事务提交完成后进行一次写入
- 重做日志在事务进行中不断地被写入,这表现为日志并不是随事务提交的顺序写入的
- 从下图可以看出:
- 二进制日志仅在事务提交时记录,并且对于每一个事务,仅包含对应事务的一个日志
- 重做日志其记录的物理操作日志,因此每个事务对应多个日志条目,并且事务的重做日志写入是并发的,并非在事务提交时写入,故其在文件中记录的顺序并非是事务开始的顺序(下图中带有*的,意为该事务的提交)
转载自blog.csdn.net/qq_41453285/article/details/107753775