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