MySQL 提供了多种日志文件,用于记录数据库的运行状态、操作行为和事务细节,这些日志在故障排查、数据恢复、性能优化和主从复制中起到关键作用。以下是主要的日志类型及其作用:
1. 错误日志(Error Log)
作用:记录 MySQL 服务启动、运行或停止时的错误信息、警告和诊断消息。文件路径:默认名为 hostname.err,路径由 log_error 参数指定。应用场景:
排查数据库启动失败原因。监控运行时的严重错误(如内存不足、表损坏)。
配置:[mysqld]
log_error = /var/log/mysql/error.log
2. 通用查询日志(General Query Log)
作用:记录所有客户端连接和执行的 SQL 语句(包括成功和失败的查询)。文件路径:默认未开启,路径由 general_log_file 指定。应用场景:
审计所有数据库操作。调试 SQL 执行问题。
注意:开启后会显著影响性能,仅建议临时使用。配置:[mysqld]
general_log = 1
general_log_file = /var/log/mysql/general.log
3. 慢查询日志(Slow Query Log)
作用:记录执行时间超过阈值(long_query_time)或未使用索引的 SQL 语句。文件路径:默认未开启,路径由 slow_query_log_file 指定。应用场景:
优化数据库性能,定位低效 SQL。分析查询瓶颈。
配置:[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2 # 单位:秒
log_queries_not_using_indexes = 1 # 记录未使用索引的查询
4. 二进制日志(Binary Log / Binlog)
作用:记录所有更改数据的操作(如 DDL 和 DML),用于主从复制和数据恢复。文件路径:默认未开启,文件名格式为 mysql-bin.000001。关键特性:
支持三种格式:STATEMENT(语句模式)、ROW(行模式)、MIXED(混合模式)。通过 mysqlbinlog 工具解析日志内容。
应用场景:
主从复制(数据同步)。数据恢复(基于时间点或位置恢复)。
配置:[mysqld]
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7 # 自动清理过期日志
5. 事务日志(InnoDB 特有)
5.1 Redo Log(重做日志)
作用:确保事务的持久性,记录事务对数据页的修改,用于崩溃恢复。文件路径:默认名为 ib_logfile0 和 ib_logfile1。工作机制:
事务提交时先写 Redo Log,再异步刷盘到数据文件。使用循环写入方式(固定大小文件)。
5.2 Undo Log(回滚日志)
作用:
实现事务回滚(原子性)。支持多版本并发控制(MVCC),提供一致性读视图。
存储方式:默认存储在系统表空间(ibdata1)或独立的 Undo 表空间。
6. 中继日志(Relay Log)
作用:在主从复制中,从库(Slave)保存从主库(Master)接收到的 Binlog 事件,等待 SQL 线程重放。文件路径:默认名为 relay-bin.000001。生命周期:
SQL 线程重放后,日志会被自动清理。通过 relay_log_purge 参数控制是否自动删除。
7. DDL 日志(Metadata Log)
作用:记录数据定义语言(DDL)操作(如 CREATE、ALTER 等),用于崩溃恢复。文件路径:默认位于数据目录,文件名为 ddl.log。注意:通常无需手动管理,由 MySQL 自动处理。
总结:日志类型对比
日志类型作用关键配置参数使用场景错误日志记录错误和警告log_error故障排查通用查询日志记录所有 SQL 操作general_log审计、调试慢查询日志记录低效 SQLslow_query_log性能优化二进制日志记录数据变更log_bin, binlog_format主从复制、数据恢复Redo Log事务持久性和崩溃恢复innodb_log_file_sizeInnoDB 事务恢复Undo Log事务回滚和 MVCCinnodb_undo_tablespaces事务原子性和一致性读中继日志主从复制中的 Binlog 中转存储relay_log从库数据同步
操作示例
查看日志配置:
SHOW VARIABLES LIKE '%log%';
手动清理 Binlog:
PURGE BINARY LOGS TO 'mysql-bin.000010'; -- 删除指定文件之前的所有日志
解析 Binlog:
mysqlbinlog --start-position=1234 --stop-position=5678 /var/log/mysql/mysql-bin.000001 > binlog.sql
通过合理配置和管理这些日志,可以提升 MySQL 的可靠性、可维护性和性能。