欢迎光临
我们一直在努力

MySQL 日志管理

1.1 为什么需要日志

  • 用于排错
  • 用来做数据分析
  • 了解程序的运行情况,了解 MySQL 的性能

1.2 日志作用

在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这种情况下,就必须保证数据的安全性和完整性,可以借助日志查看操作记录或者完成数据恢复。

1.3 日志文件查看方法

不同 MySQL 安装方式,日志存储位置、文件名会有差异,优先通过 MySQL 内置变量查询日志位置,也可以查看配置文件。

Windows 系统: 主配置文件 my.ini 路径:C:\\ProgramData\\MySQL\\MySQL Server 8.0\\my.ini

datadir=C:/ProgramData/MySQL/MySQL Server 8.0\\Data
log-error="LEGION.err"

错误日志实际路径:C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data\\LEGION.err

Linux 系统: 很多二进制安装的 MySQL 不会在 /etc/my.cnf 放置配置文件,直接在 MySQL 内部查询日志参数是最稳妥的方式,数据目录一般存放所有日志文件。

小贴士:不要只依赖配置文件查找日志,优先 show variables like 'xxx'; 查询。

1.4 常见日志类型之错误日志 error log

错误日志是 MySQL 最基础的日志,记录服务启停、运行报错、调度事件、从库复制进程相关信息。 记录内容:

  • 服务器启动和关闭过程中的信息
  • 服务器运行过程中的错误信息
  • 事件调度器运行定时事件产生的信息
  • 从服务器上 slave 进程运行产生的信息
  • 日志分级:[System] 系统信息、[Warning] 警告、[Error] 错误,重点排查 Error 级别内容。

    Windows 查看

    mysql> show variables like 'log_error';
    +—————+———————–+
    | Variable_name | Value |
    +—————+———————–+
    | log_error | .\\DESKTOP-QKBUKAS.err |
    +—————+———————–+
    1 row in set, 1 warning (0.01 sec)

    配置文件设置:log-error=文件路径/文件名 指定错误日志位置。

    Linux 查看

    mysql> show variables like 'log_error';
    +—————+————-+
    | Variable_name | Value |
    +—————+————-+
    | log_error | ./Mysql.err |
    +—————+————-+
    1 row in set (0.01 sec)

    1.5 常见日志类型之通用查询日志 general log

    通用查询日志会记录客户端所有连接、所有 SQL 操作,包括查询、更新语句,登录退出等。

    ⚠️ 生产默认关闭!开启后会大量消耗磁盘、CPU、内存,只适合临时排查问题,用完立刻关闭。

    日志输出方式由 log_output 控制,可选值:

    • FILE:写入文本文件(默认)
    • TABLE:存入 mysql 库的 general_log 表
    • NONE:不记录

    Windows 操作

    查看状态

    mysql> show global variables like '%general_log%';
    +——————+———————+
    | Variable_name | Value |
    +——————+———————+
    | general_log | OFF |
    | general_log_file | DESKTOP-QKBUKAS.log |
    +——————+———————+

    临时开启

    mysql> set global general_log=on;

    查看输出类型

    mysql> show variables like '%log_output%';
    +—————+——-+
    | Variable_name | Value |
    +—————+——-+
    | log_output | FILE |
    +—————+——-+

    临时关闭

    mysql> set global general_log=off;

    永久配置(my.ini)

    general-log=1
    general_log_file="C:/xxx/mysql.log"
    log-output=FILE

    Linux 操作

    # 查看状态
    show global variables like '%general_log%';
    # 开启
    set global general_log=on;
    # 关闭
    set global general_log=off;

    默认日志路径示例:/usr/local/mysql/data/Mysql.log

    1.6 常见日志类型之慢查询日志 slow log

    慢查询日志用来捕获执行耗时超过阈值的 SQL,是 SQL 优化的核心工具,记录执行时间超过 long_query_time 的语句,也可以记录不走索引的查询。

    • 默认阈值:10 秒,最小支持 0,精度到微秒
    • 生产环境建议开启,阈值一般调整为 1 秒

    Windows

    # 查看慢日志状态
    show global variables like '%slow_query_log%';
    # 开启慢查询日志
    set global slow_query_log=on;
    # 查看时间阈值
    show global variables like 'long_query_time';

    日志示例路径:C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data\\DESKTOP-QKBUKAS-slow.log

    Linux

    # 查看状态
    show global variables like '%slow_query_log%';
    # 开启,0关闭
    set global slow_query_log=1;
    # 查看阈值
    show global variables like 'long_query_time';

    默认日志路径:/usr/local/mysql/data/Mysql-slow.log

    1.7 常见日志类型之撤销日志 undo log

    Undo log 回滚日志,相当于 MySQL 的撤销操作,支持事务回滚、MVCC 多版本并发控制。 记录逻辑反向操作:

    • INSERT:记录对应的 DELETE
    • DELETE:标记行删除位,回滚时恢复标记
    • UPDATE:记录修改前旧数据,回滚时覆盖回去

    MySQL8.0.20 之后独立存放,Windows 示例路径:C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data\\undo_001

    区分:undo 是逻辑日志,记录反向 SQL;redo 是物理日志,记录页的变更。

    1.8 常见日志类型之重做日志 redo log

    InnoDB 预写式日志(WAL)核心组件。 InnoDB 数据先写入内存缓冲池 Buffer Pool,后台线程异步刷盘;如果宕机,内存数据丢失,依靠 redo log 完成崩溃恢复,保证已经提交的事务一定持久化。

    MySQL8 redo log 独立目录:#innodb_redo 文件两类:

    • #ib_redoN:正在使用的 redo 文件
    • #ib_redoN_tmp:空闲备用 redo 文件

    查看 redo 信息 SQL:

    select * from performance_schema.innodb_redo_log_files\\G
    show global status like '%innodb%redo%';

    1.9 常见日志类型之二进制日志 binlog(重点)

    binlog 二进制日志,记录所有修改数据的 DML/DDL 语句,SELECT 查询语句不会记录。 三大核心用途:

  • 主从复制:从库拉取主库 binlog,重放 SQL 实现数据同步
  • 数据恢复:结合全量备份 + binlog,恢复到任意时间点
  • 安全审计:追溯数据变更,排查注入、误删操作
  • 常用操作

    # 查看binlog开关状态
    show variables like "%log_bin%";
    # 列出所有binlog文件
    show binary logs;
    # 查看当前正在写入的binlog
    show master status;
    # 在线查看binlog事件
    show binlog events in "LEGION-bin.000008";

    mysqlbinlog 命令导出(Windows 示例)

    cd C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Data
    mysqlbinlog DESKTOP-QKBUKAS-bin.000035 > test.sql

    日志刷新 & 切换日志文件

    刷新日志会关闭当前日志,生成全新 binlog 文件,常用于日志分割、维护。

    # SQL内刷新
    flush logs;
    show master status;

    shell / 命令行执行

    mysqladmin flush-logs -uroot -p
    # refresh 等价 flush logs
    mysqladmin refresh -uroot -p

    注意:命令行直接带密码有安全警告,生产尽量交互式输入密码。

    1.10 常见日志类型之中继日志 relay log

    中继日志 只存在于主从复制架构的从库,单机环境看不到。 工作流程:从库 IO 线程拉取主库 binlog,写入本地 relay log;再由 SQL 线程读取 relay log,重放 SQL,同步数据。 relay log 相当于主从同步的中转站,复制完成后可按策略清理。

    小结汇总表

    日志类型作用是否默认开启适用场景
    error log 记录启停、警告、错误 ✅ 默认开启 故障排查
    general log 记录全部 SQL、连接 ❌ 默认关闭 临时问题溯源
    slow log 记录慢 SQL ❌ 默认关闭 SQL 优化
    undo log 事务回滚、MVCC ✅ 默认开启 InnoDB 事务基础
    redo log 崩溃恢复、WAL ✅ 默认开启 InnoDB 持久化
    binlog 数据变更记录、复制、恢复 ❌ 默认关闭 主从、数据恢复、审计
    relay log 从库中转 binlog – 仅主从从节点
    赞(0)
    未经允许不得转载:171主机测评 » MySQL 日志管理
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址