MySQL数据库中包含多种类型的日志,每种日志都有其特定的作用:
-
Redo Log (重做日志)
- 由InnoDB存储引擎维护,主要用于崩溃恢复。
- 记录了对数据库所做的更改操作,在事务提交前,先将redo log写入磁盘上的日志文件,确保即使在系统崩溃的情况下,也能通过redo log将已提交事务但未持久化到数据文件的更改恢复。
- 默认开启。
- 不以文件的形式存储,而是以一组固定大小的文件组的形式存在于 InnoDB 存储引擎的共享表空间中。
-
Undo Log (回滚日志)
- 同样由InnoDB存储引擎维护,支持事务的原子性和MVCC(多版本并发控制)。
- 记录了事务进行前的数据状态,当事务回滚时,可以利用undo log恢复到事务开始前的状态,同时也用于实现并发读取时的一致性视图。
- 默认开启。
- 不以文件的形式存储,作为 InnoDB 存储引擎的一部分存储在共享表空间中。
-
Binary Log (二进制日志 / Binlog)
- 在MySQL Server层产生,记录了所有更改数据的SQL语句事件(如INSERT, UPDATE, DELETE等)。
- 用于主从复制(replication),从服务器通过应用主服务器的binlog来保持数据同步。
- 支持基于时间点的数据恢复和灾难恢复。
- 默认开启。
- 以文件的形式存储,默认的 Binary Log 文件名格式是主机名加上序列号,例如
hostname-bin.000001,存储在数据目录中。
-
General Query Log (通用查询日志)
- 记录了MySQL服务器接收的所有SQL语句,包括成功的、失败的以及那些由于语法错误未能执行的语句。
- 主要用于审计、故障排查和性能分析。
- 默认关闭,开启需要修改mysql配置文件,如下:
# 开启通用查询日志
general_log = 1
# 通用查询日志输出文件地址
general_log_file = /path/to/general_query_log_file.log
-
Slow Query Log (慢查询日志)
- 记录执行时间超过指定阈值的SQL查询语句,或者未使用索引的查询。
- 有助于优化数据库性能,找出执行效率低下的SQL语句。
- 默认关闭,开启需要修改mysql配置文件,如下:
# 开启慢查询日志
slow_query_log = 1
# 慢查询日志输出文件地址
slow_query_log_file = /path/to/slow_query_log_file.log
# 超过多少秒的查询会被记录到慢查询日志中
long_query_time = 2
-
Error Log (错误日志)
- 记录MySQL服务启动、停止期间发生的错误信息以及其他严重警告信息。
- 用于定位和解决问题,尤其是在MySQL服务不能正常启动或运行时。
- 默认开启,默认输出地址可能因系统不同而不同。