MySQL 日志类型概述

MySQL 的日志系统包括多种类型,每种日志用于不同的场景。主要日志类型有:

  • 二进制日志(Binary Log):记录所有修改数据的 SQL 语句,用于数据恢复和主从复制。
  • 错误日志(Error Log):记录 MySQL 运行时的错误、警告和关键事件。
  • 查询日志(General Query Log):记录所有 SQL 请求,包括 SELECT 和 SHOW 等非修改操作。
  • 慢查询日志(Slow Query Log):记录执行时间超过阈值的 SQL 语句,用于性能优化。
  • 重做日志(Redo Log):InnoDB 引擎特有,用于事务的持久性和崩溃恢复。
  • 撤销日志(Undo Log):InnoDB 引擎特有,用于事务回滚和多版本并发控制(MVCC)。

查询日志的启用与查看

启用查询日志
在 MySQL 配置文件(如 my.cnfmy.ini)中设置以下参数:

general_log = 1
general_log_file = /var/log/mysql/query.log

重启 MySQL 服务或动态启用:

SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/query.log';

查看查询日志内容
直接读取日志文件:

cat /var/log/mysql/query.log

或通过 MySQL 命令动态查看:

SHOW VARIABLES LIKE 'general_log%';

慢查询日志的配置与分析

启用慢查询日志
在配置文件中添加:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2  # 阈值(秒),超过该时间的查询会被记录
log_queries_not_using_indexes = 1  # 记录未使用索引的查询

动态启用:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

分析慢查询日志
使用 mysqldumpslow 工具:

mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.log

参数说明:

  • -s t:按总时间排序。
  • -t 10:显示前 10 条记录。

二进制日志(Binlog)的管理

查看 Binlog 文件列表

SHOW BINARY LOGS;

查看 Binlog 内容
使用 mysqlbinlog 工具:

mysqlbinlog --base64-output=DECODE-ROWS -v /var/lib/mysql/binlog.000001

参数说明:

  • --base64-output=DECODE-ROWS:解码 Base64 编码的行事件。
  • -v:输出详细信息。

清理 Binlog
删除指定文件之前的日志:

PURGE BINARY LOGS TO 'binlog.000005';

或按时间清理:

PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';

错误日志的定位与排查

错误日志路径
通过以下命令查看:

SHOW VARIABLES LIKE 'log_error';

常见错误类型

  • 启动失败:检查端口冲突或配置文件语法错误。
  • 权限问题:确保 MySQL 用户对日志文件有写入权限。
  • InnoDB 崩溃:查看错误日志中的堆栈跟踪信息。

重做日志与撤销日志的优化

重做日志(Redo Log)配置
调整日志文件大小和数量(默认 2 个文件,每个 48MB):

innodb_log_file_size = 256M
innodb_log_files_in_group = 2

撤销日志(Undo Log)配置
设置独立表空间并限制大小:

innodb_undo_directory = /path/to/undo
innodb_undo_tablespaces = 8
innodb_undo_log_truncate = ON
innodb_max_undo_log_size = 1G

日志系统的性能影响与调优

性能权衡

  • 开启查询日志和慢查询日志会增加 I/O 负载,建议仅在调试时启用。
  • 二进制日志对主从复制至关重要,但高频写入可能影响性能,可通过 sync_binlog 参数调整同步频率。

关键参数调优

sync_binlog = 1  # 每次事务提交都同步 Binlog(安全性高,性能低)
expire_logs_days = 7  # 自动清理 7 天前的 Binlog
innodb_flush_log_at_trx_commit = 1  # 每次事务提交都刷盘(保证持久性)

实际应用场景

场景 1:排查性能瓶颈

  1. 启用慢查询日志,分析耗时 SQL。
    2
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐