undo log、redo log、bin log三者之间的区分?
从 产生的时间点、日志内容、用途 三方面展开论述即可
1.undo log——撤销日志
-
时间点:事务开始之前产生,根据当前版本的数据生成一个undo log,也保存在事务开始之前
-
作用:在InnoDB存储引擎中,用于保存旧的数据版本,以便在事务回滚时使用。
-
内容:旧版本的数据
-
用途:
- 数据的回滚(撤销)
- 保证MVCC
- 支持事务的ACID特性,确保 数据原子性和一致性
2.redo log——重做日志
-
时间点:事务开始之后产生,在事务的执行过程中写入日志数据
-
作用:在InnoDB存储引擎中用于确 保事务的持久性。
-
内容:物理日志,对数据所做的修改。
-
用途:在系统崩溃时,用于同步数据。
-
处理过程:
- 分为两部分,重做日志缓存(redo log buffer,存在于内存);重做日志文件(redo log file,存在于磁盘)
- 当事务提交之后,将所有修改信息存储到日志文件中,而不是磁盘中,即WAL(Write-Ahead-Logging)预写日志系统
- 好处:
- 保证事务的持久性
- 只记录对数据的修改,数据比一页数据小很多,大大减少IO频率
- redo log写入是顺序写入,而修改磁盘是随机写入
3.bin log——二进制日志
- 作用:记录所有修改数据的SOL语句,用于数据复制和数据恢复。
- 内容:插入、更新、删除等修改数据或数据结构的操作。
- 用途:
- 复制:在主从复制中,从服务器会读取主服务器的二进制日志文件,以保持与主服务器的数据同步。
- 数据恢复:可以使用二进制日志进行点时间恢复。
4.Error log——错误日志
- 作用:记录mysqld启动、运行或停止时出现的问题。
- 内容:包括启动、运行或关闭mysql时的问题、以及服务或服务器出错的信息。
- 用途:诊断问题,确定哪些客户端尝试连接,以及是否出现了表的损坏等。
5.General Query log——查询日志
- 作用:记录所有到MVSOL服务器的连接和查询。
- 内容:客户端连接及每个连接发送给服务器的所有SOL查询。
- 用途:分析和查找可能存在的问题。但在生产环境中,常常因为性能原因而不启用。
6.Slow Query log慢查询日志
- 作用:记录查询执行时间超过long query time值的所有SOL查询。
- 内容:响应时间超出预设阈值的SOL查询。
- 用途:帮助找到、分析并优化性能较差的查询。
7.小结
产生时间点 | 内容 | 用途 | |
---|---|---|---|
undo log | 事务开始之前写入并保存 | 逻辑日志,旧版本数据 | 回滚,提供多版本并发控制下的读,保证事务的原子性和一致性 |
redo log | 事务开始之后开始,根据事务执行写入 | 物理日志,对数据的修改 | mysql宕机,用于恢复数据到磁盘,保证事务的持久性 |
bin log | 事务提交的时候,一次性将事务中的所有sql记录到bin log | 逻辑日志,事务中所有的sql | 主从复制,基于时间点的数据恢复 |