You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mysql-slow.log被截断后滚动旧文件位置及日志滚动开启方法

MySQL慢查询日志截断问题答复

1. 慢查询日志滚动文件、历史压缩旧文件的默认存储路径

MySQL原生没有内置慢查询日志自动轮转、历史文件压缩的功能,不存在官方预设的轮转后文件、压缩包默认存储路径。
你遇到的慢日志被截断,基本是外部日志轮转工具或者手动操作导致的:

  • 如果是系统自带的logrotate工具做的自动轮转,轮转生成的旧文件、压缩包默认和当前生效的慢查询日志存放在同一个目录。你可以直接在MySQL里执行show variables like 'slow_query_log_file';查到当前慢日志的实际存放路径:如果是包管理器安装的MySQL,默认路径一般是/var/log/mysql/或者/var/lib/mysql/;如果是二进制包手动编译安装的,默认在MySQL的数据目录下。轮转后的文件命名通常是mysql-slow.log.1、mysql-slow.log.2.gz这种带数字后缀、压缩包带.gz后缀的格式。
  • 如果是手动执行了flush logs或者mysqladmin flush-logs命令触发日志重载,且操作前没有给旧日志做重命名备份,旧日志会被直接覆盖截断,不会生成备份的轮转文件。

2. 是否需要在配置文件指定参数启用慢查询日志滚动功能

不需要,也没法通过修改MySQL配置文件(my.cnf/my.ini)开启慢日志自动滚动——因为MySQL本身就没提供对应功能的配置参数。
要实现慢日志自动轮转、压缩旧文件,通用方案有两种,都不需要修改MySQL核心配置:

  • 用系统级的logrotate工具配置规则:在/etc/logrotate.d/目录下新增MySQL慢日志的轮转配置,指定日志路径、保留历史文件份数、是否开启gzip压缩、轮转后执行flush logs通知MySQL重新打开日志文件即可,这是生产环境最常用的方案,不需要额外开发脚本。
  • 自定义定时切割脚本:写简单的shell定时任务,按固定周期(比如按天)把当前慢日志重命名为带日期的备份文件,需要压缩的话直接调用gzip压缩,最后执行mysqladmin flush-logs让MySQL生成新的空慢日志文件继续写入即可。

补充排查提示:你可以先去当前慢日志所在目录下看有没有带数字后缀、.gz后缀的同名文件,如果有就是已经被logrotate自动切割了,不是日志丢失。

内容的提问来源于stack exchange,提问作者Banana Tech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:09:20