MySQL日志全解析:优化与排查指南,GameObject 常见类型详解 -- 运输工具(TRANSPORT)。
·
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.cnf 或 my.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:排查性能瓶颈
- 启用慢查询日志,分析耗时 SQL。
2
更多推荐

所有评论(0)