0
点赞
收藏
分享

微信扫一扫

docker 创建RedHat8.5镜像

程序员伟杰 03-05 16:30 阅读 3

谈谈mysql 的日志?

MySQL数据库中有多种日志,其中最重要的是二进制日志(binlog)、重做日志(redo log)和回滚日志(undo log)。这些日志在数据库操作中起着至关重要的作用,不仅保证了数据的安全性和完整性,还对性能优化和故障恢复提供了支持。具体如下:

二进制日志(binlog)

  • 记录了所有引起数据变化的操作,例如INSERT、UPDATE、DELETE等。

  • 用于数据备份和还原,以及在主从复制中的数据传输。

  • 可以设置binlog的刷新和同步模式,以控制数据写入磁盘的时机和确保数据的安全性。

重做日志(redo log)

  • 记录了事务对数据页的修改,用于系统崩溃后的恢复。

  • 它是InnoDB存储引擎特有的日志类, 确保事务的持久性,防止系统故障导致的数据丢失。在系统崩溃后,MySQL可以重新执行那些已经提交但未写入数据文件的事务。

  • 记录了事务对数据页的修改。

回滚日志(undo log)

  • 用于在事务回滚时恢复到原始状态,保证事务的原子性。

  • 记录了事务所做的修改,以便在需要时进行回滚。

错误日志(error log)

  • 错误日志文件对 MySQL 的启动、运行、关闭过程进行了记录,能帮助定位 MySQL 问题。

慢查询日志(slow query log)

  • 慢查询日志是用来记录执行时间超过 long_query_time 这个变量定义的时长的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。

一般查询日志(general log)

  • 一般查询日志记录了所有对 MySQL 数据库请求的信息,无论请求是否正确执行。

binlog 和 redo log 有什么区别?

binlog(二进制日志)是MySQL Server层实现的,用于记录数据库执行的写入性操作信息,以二进制形式保存在磁盘中。它是逻辑日志,记录的是SQL语句,而不是数据页的实际变化。binlog的目的是用于人工恢复数据,例如在数据丢失时可以用来恢复数据,同时也用于主从复制中的数据同步。所有MySQL存储引擎都可以使用binlog,因为它是Server层的功能。binlog是追加写的,当日志文件写满后,会新建文件继续写。

redo log(重做日志)是InnoDB存储引擎特有的,用于保证数据库崩溃时的事务持久性。它是物理日志,记录的是数据页的实际变化,而不是SQL语句。redo log的目的是确保即使在系统崩溃后,已经提交的事务也能被正确地记录下来。redo log文件是固定大小的,采用循环写的方式,当写满后会从头继续写,旧的记录会被新的覆盖。

最后,binlog和redo log在保障数据完整性方面各有侧重。binlog日志主要用于归档和恢复,而仅依靠binlog是没有crash-safe能力的,因为它不具备InnoDB存储引擎的崩溃恢复特性。相反,只有redo log也不行,因为redo log的记录在落盘后可能会被覆盖掉,且它仅适用于InnoDB存储引擎。

举报

相关推荐

0 条评论