Mysql中的各种日志
Mysql 中的各种日志
一、错误日志(Error Log)
核心定位:MySQL 的 “故障诊断第一站”,记录服务器运行全生命周期的关键状态和错误。
- 记录内容:
- MySQL 启动 / 停止 / 重启的成功 / 失败信息;
- 运行中出现的错误(如连接异常、表损坏、权限不足、磁盘满、内存不足等);
- 警告信息(如配置参数不推荐、索引失效提醒等);
- 部分重要的信息类日志(如主从复制状态变更)。
- 关键特点:
- 默认强制开启,无法关闭(是 MySQL 最基础的日志);
- 纯文本格式,可直接用 cat/vi 等工具查看。
配置方式(my.cnf/my.ini):
# 指定日志文件路径(默认在数据目录下,文件名一般是hostname.err)
log_error = /var/log/mysql/mysql_error.log
# 日志级别:ERROR(仅错误)、WARNING(错误+警告)、INFO(全部,默认)
log_error_verbosity = 3
- 适用场景:MySQL 启动失败、运行崩溃、连接报错、主从同步异常等故障排查。
二、二进制日志(Binary Log,简称 binlog)
核心定位:MySQL 的 “数据变更账本”,是主从复制和数据恢复的核心。
- 记录内容:
- 所有修改数据的操作(INSERT/UPDATE/DELETE、CREATE/DROP 等 DDL,不包含 SELECT/ SHOW 等只读操作);
- 以二进制格式存储(无法直接查看,需用
mysqlbinlog工具解析)。
- 关键特点:
- 默认关闭(但主从复制必须开启);
- 有 3 种记录格式(影响主从同步和恢复效果):
STATEMENT:记录执行的 SQL 语句(体积小,但可能因函数 / 变量导致主从不一致);ROW:记录行的实际变更(最安全,主从一致,推荐生产使用,体积稍大);MIXED:混合模式(自动选择 STATEMENT/ROW);
- 日志会按大小 / 时间滚动生成(如 mysql-bin.000001、mysql-bin.000002),可配置自动清理。
- 配置方式:
# 开启binlog(指定日志前缀,默认在数据目录)
log_bin = /var/lib/mysql/mysql-bin
# 设置binlog格式(推荐ROW)
binlog_format = ROW
# 单个binlog文件最大大小(默认1G)
max_binlog_size = 512M
# 自动清理7天前的binlog(防止磁盘占满)
expire_logs_days = 7
# 同步刷盘(保证崩溃不丢日志,生产建议开启)
sync_binlog = 1
- 常用操作:
# 解析binlog查看内容
mysqlbinlog /var/lib/mysql/mysql-bin.000001
# 按时间范围解析(恢复指定时间段数据)
mysqlbinlog --start-datetime="2025-12-01 00:00:00" --stop-datetime="2025-12-01 12:00:00" /var/lib/mysql/mysql-bin.000001
- 适用场景:主从复制、数据恢复(误删数据后通过 binlog 回滚)、审计数据变更。
三、慢查询日志(Slow Query Log)
核心定位:MySQL 的 “性能优化工具”,专门捕捉耗时久的 SQL。
- 记录内容:
- 执行时间超过
long_query_time阈值的 SQL(默认 10 秒,建议生产设为 1-2 秒); - 未使用索引的查询(需开启
log_queries_not_using_indexes); - 执行时间短但扫描行数多的查询(可选配置)。
- 执行时间超过
- 关键特点:
- 默认关闭(需手动开启);
- 纯文本格式,可直接查看,也可通过
pt-query-digest工具分析。
- 配置方式:
# 开启慢查询日志
slow_query_log = ON
# 日志文件路径
slow_query_log_file = /var/log/mysql/mysql_slow.log
# 慢查询阈值(单位:秒,支持小数,如0.5=500毫秒)
long_query_time = 2
# 记录未使用索引的查询(即使执行时间短)
log_queries_not_using_indexes = ON
# 忽略管理类语句(如ALTER TABLE,可选)
log_slow_admin_statements = OFF
- 常用操作:
# 用pt-query-digest分析慢查询日志(需安装percona-toolkit)
pt-query-digest /var/log/mysql/mysql_slow.log
- **适用场景**:找出耗时 SQL、优化索引、提升数据库性能。