MySQL 日志输出的配置与优化,关键在于明确日志类型、设置合适的格式,并结合实际需求进行性能权衡。合理配置不仅能提升问题排查效率,还能降低系统开销。
启用并配置通用查询日志(General Query Log)
通用日志记录所有进入 MySQL 的 SQL 请求,适合调试但对性能有影响,生产环境慎用。
在 my.cnf 或 my.ini 中添加:[mysqld] general_log = ON general_log_file = /var/log/mysql/general.log log_output = FILElog_output 可设为 TABLE 或 FILE,TABLE 存入 mysql.general_log 表,便于查询;FILE 输出到文件更高效。 建议仅在排查问题时临时开启,避免长期运行。
优化慢查询日志(Slow Query Log)
慢查询日志是性能调优的核心工具,应精准配置以捕获真正影响性能的语句。
开启慢查询日志并设置阈值:slow_query_log = ON slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1.0 log_queries_not_using_indexes = ONlong_query_time 定义“慢”的标准,单位秒,可设为 0.5 或 1.0。 log_queries_not_using_indexes 记录未使用索引的查询,帮助发现潜在问题。 结合 pt-query-digest 工具分析日志,定位高频或耗时语句。
调整错误日志格式与级别
错误日志记录启动、关闭及运行时异常,确保关键信息不遗漏。
配置错误日志路径和格式:log_error = /var/log/mysql/error.log log_error_verbosity = 2log_error_verbosity 控制详细程度:1=error,2=error+warning,3=error+warning+note。推荐设为 2。 配合 log_timestamps 设置日志时间戳时区,避免排查时区混乱:
log_timestamps = SYSTEM
二进制日志(Binary Log)格式选择
Binlog 用于主从复制和恢复,其格式直接影响日志大小与一致性。
三种格式:STATEMENT、ROW、MIXED。 推荐使用 ROW 模式,更安全且能精确还原数据变更:binlog_format = ROWROW 模式日志量大,需定期清理或启用压缩(MySQL 8.0+ 支持):
binlog_row_image = MINIMALMINIMAL 只记录变更前后差异,减少日志体积。
基本上就这些。根据场景开启对应日志,避免全量记录带来的 I/O 压力。定期轮转日志文件,结合监控工具实现告警,才能做到高效运维。
