Skip to content

Mysql中有哪些日志

服务层日志 (Server Level Logs)

1. 错误日志 (Error Log)

  • 作用:这是MySQL最重要的日志之一。它记录了mysqld服务在启动、运行和关闭过程中遇到的所有严重错误、警告以及一些重要的诊断信息。
  • 应用场景:
    • 当数据库无法启动时,首先就应该查看错误日志,它会告诉你原因。
    • 排查运行中的疑难杂症,比如某个查询导致服务器崩溃,相关的堆栈信息会记录在这里。
  • 配置:通过log_error参数指定文件路径。

2. 通用查询日志 (General Query Log)

  • 作用:它会记录所有到达MySQL服务器的连接和执行的每一条SQL语句。
  • 应用场景:
    • 用于审计,可以完整地回溯某个时间段内数据库的所有操作。
    • 用于问题复现,当某个操作导致问题但无法确定是哪条SQL时,可以开启它来捕获。
  • 注意事项:这个日志会记录海量信息,对服务器的IO性能影响非常大。因此,除非是在调试或审计的特殊情况下,生产环境通常是关闭的。
  • 配置:通过general_log开关和general_log_file路径来控制。

3. 慢查询日志 (Slow Query Log)

  • 作用:这是我们后端工程师最常打交道的日志。它记录了执行时间超过指定阈值的所有SQL查询。
  • 应用场景:
    • 性能优化的主要入口。通过分析慢查询日志,我们可以找到系统中效率最低的SQL语句,然后针对性地进行优化(比如加索引、改写SQL等)。
  • 核心配置:
    • slow_query_log: 开关。
    • long_query_time: 定义“慢”的时间阈值,单位是秒。
    • log_queries_not_using_indexes: 一个非常有用的选项,开启后,即使查询不慢,但只要它没有使用索引,也会被记录下来,帮助我们主动发现潜在的性能问题。

4. 二进制日志 (Binary Log / Binlog)

  • 作用:这是MySQL的逻辑日志,它记录了所有对数据库进行修改的操作(如INSERT, UPDATE, DELETE),但不包括SELECT。它以一种紧凑的二进制格式存储。
  • 应用场景:
    • 数据复制(Replication):主从同步的基石。从库(Slave)通过读取主库(Master)的binlog来重放主库上的数据变更,从而保持数据一致。
    • 数据恢复(Point-in-Time Recovery):当数据库发生意外时,我们可以先用全量备份恢复到一个过去的时间点,然后利用binlog重放从那个时间点到故障发生前的所有操作,实现精准的数据恢复。
  • 格式:有三种格式,STATEMENT(记录SQL语句,可能导致主从不一致)、ROW(记录每一行数据的变更细节,最安全,但日志量大)和MIXED(混合模式,默认使用STATEMENT,但在特定情况下会自动切换到ROW)。现在ROW格式是主流和推荐的。

引擎层日志 (Engine Level Logs)

5. 重做日志 (Redo Log)

  • 作用:这是InnoDB特有的物理日志,用于实现事务的持久性(Durability)和崩溃恢复(Crash Recovery)。
  • 工作原理:当事务对数据进行修改时,InnoDB会先把修改内容以物理变更的形式写入到Redo Log Buffer,然后这个Buffer会适时地刷入到磁盘上的Redo Log文件。这个写入是顺序IO,非常快。而真正的数据写入磁盘(随机IO,较慢)则可以异步进行。
  • 好处:它保证了即使数据库在数据页还未完全写入磁盘时宕机,重启后也可以通过重放Redo Log来恢复到宕机前的状态,确保已提交事务的修改不会丢失。这就是所谓的WAL(Write-Ahead Logging)技术。

6. 撤销日志 (Undo Log)

  • 作用:它也是InnoDB特有的逻辑日志,主要有两个作用:
    1. 事务回滚(Rollback):当一个事务需要回滚时,InnoDB会利用Undo Log中的信息来执行与原始操作相反的操作,从而将数据恢复到事务开始前的状态。
    2. 实现MVCC(多版本并发控制):Undo Log中保存了数据的历史版本。当一个读事务需要查看某个旧版本的数据时,InnoDB会通过Undo Log来构建这个数据快照。
日志类型 所属层次 主要作用
错误日志 服务层 记录启动、运行、关闭的错误和诊断信息
通用查询日志 服务层 记录所有连接和SQL语句,用于审计和调试
慢查询日志 服务层 记录执行慢的SQL,是性能优化的关键
二进制日志 (Binlog) 服务层 记录数据修改,用于主从复制和数据恢复
重做日志 (Redo Log) 引擎层 (InnoDB) 保证事务持久性和崩溃恢复
撤销日志 (Undo Log) 引擎层 (InnoDB) 实现事务回滚和MVCC