6.4.1 日志类型与作用概览(error/slow/general/redo/binlog/relay)

MySQL 日志体系用于保障稳定性、可恢复性与可审计性。运维需理解各类日志的定位价值、开销影响与保留策略,并能快速检查配置与排错。

文章图片

日志类型与作用概览#

  • 错误日志(error):记录启动/关闭、崩溃、权限、表损坏、复制异常等核心事件,是故障定位的第一入口。
  • 慢查询日志(slow):记录超过阈值的 SQL 与执行详情,用于性能瓶颈分析与索引优化。
  • 通用日志(general):记录所有连接与 SQL,审计价值高但性能开销大。
  • 重做日志(redo):InnoDB 用于崩溃恢复的物理日志,保证事务持久性。
  • 二进制日志(binlog):记录逻辑变更,用于主从复制、增量备份与时间点恢复。
  • 中继日志(relay):从库接收并缓存主库 binlog 用于回放,复制链路异常时排障关键。

关键配置与示例(含命令解释)#

1) 查看当前日志配置#

SHOW VARIABLES LIKE 'log_error';
SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'general_log%';
SHOW VARIABLES LIKE 'log_bin%';
SHOW VARIABLES LIKE 'relay_log%';
SHOW VARIABLES LIKE 'innodb_log_file_size';

预期效果:输出各日志路径、开启状态与参数。

2) my.cnf 基础启用示例#

# /etc/my.cnf
[mysqld]
log_error=/var/log/mysql/error.log

slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=0.5
min_examined_row_limit=100

general_log=OFF
general_log_file=/var/log/mysql/general.log

log_bin=/var/log/mysql/binlog/mysql-bin
binlog_format=ROW
binlog_expire_logs_seconds=604800

relay_log=/var/log/mysql/relay/relay-bin

innodb_log_file_size=512M
innodb_log_files_in_group=2

命令解释
- log_error:错误日志路径。
- slow_query_log/long_query_time:慢查询开关与阈值。
- log_bin/binlog_format:二进制日志路径与格式。
- relay_log:中继日志路径。
- innodb_log_file_size:重做日志单个文件大小。

应用配置并重启

systemctl restart mysqld

3) 生成可观测日志的演示#

-- 生成慢查询
SET SESSION long_query_time=0.001;
SELECT SLEEP(0.01);

-- 触发错误日志示例(权限不足)
DROP USER 'not_exist'@'%';

-- 生成 binlog
CREATE DATABASE log_demo;
USE log_demo;
CREATE TABLE t1(id INT PRIMARY KEY, c1 VARCHAR(20));
INSERT INTO t1 VALUES (1,'a');

预期效果
- slow.log 记录 SELECT SLEEP
- error.log 记录权限/对象不存在错误;
- binlog 出现 CREATE/INSERT 事件。


运维排错与检查要点(含命令)#

错误日志无法写入#

ls -l /var/log/mysql/error.log
chown mysql:mysql /var/log/mysql/error.log
chmod 640 /var/log/mysql/error.log

解释:确保 mysqld 进程对日志文件可写。

binlog 未生成/未滚动#

SHOW VARIABLES LIKE 'log_bin';
SHOW MASTER STATUS;

排错方向:检查 log_bin 是否为 ON、路径是否可写、磁盘是否已满。

relay log 膨胀或复制延迟#

SHOW SLAVE STATUS\G

关注字段:Relay_Log_SpaceSeconds_Behind_MasterLast_SQL_Error


快速练习(可操作)#

  1. 开启慢查询并验证
    - 设置 long_query_time=0.001
    - 执行 SELECT SLEEP(0.01);
    - 用 tail -n 5 /var/log/mysql/slow.log 验证输出。

  2. 检查 binlog 是否记录变更
    bash mysqlbinlog /var/log/mysql/binlog/mysql-bin.000001 | head -n 50
    预期:可看到 CREATE DATABASE/CREATE TABLE/INSERT 事件。

  3. 模拟从库中继日志诊断
    - SHOW SLAVE STATUS\G
    - 记录 Last_SQL_Error 并定位问题 SQL。


运维建议#

  • error 与 binlog 通常常开;slow 可常开但合理设置阈值;general 只在特定排障或审计窗口短期开启。
  • redo 与 relay 属于系统关键日志,需保证磁盘容量与I/O稳定,避免因空间不足导致服务不可用。