外贸站宝塔面板定时清理MySQL慢查询日志

对于运行外贸网站的服务器,MySQL慢查询日志是排查性能问题的重要工具。
但日志文件如果不加管理,会持续增长,最终撑满磁盘,导致网站无法访问。
本文面向零基础的外贸站长,讲解如何在宝塔面板环境中,通过两种方式实现MySQL慢查询日志的定时清理:一是利用MySQL自带的日志轮转功能,二是通过写shell脚本配合宝塔计划任务。
操作前请先确认你的服务器已安装宝塔面板,并且已经开启了MySQL慢查询日志。

先确认慢查询日志是否已开启

在宝塔面板左侧点击“数据库”,选择你的MySQL版本,进入“配置修改”。
找到 slow_query_log 项,确认值为 ON
同时查看 slow_query_log_file 指定的路径,比如 /www/server/data/mysql-slow.log
如果未开启,可以直接在配置中改为 ON,并设置 long_query_time = 2(超过2秒的查询记录)。
保存后重启MySQL使设置生效。

方法一:利用MySQL自带的日志轮转(最省心)

MySQL 5.1之后支持通过 expire_logs_days 参数自动清理慢查询日志。
但注意:这个参数只对二进制日志生效,对慢查询日志不直接生效。
更可靠的做法是使用 mysqladmin flush-logs 结合系统logrotate。

宝塔面板默认的MySQL安装目录下有一个 logrotate 配置文件。
你可以进入 /etc/logrotate.d/ 目录,找到名为 mysql 的文件(如果没有则自己创建)。
内容参考如下:

/www/server/data/mysql-slow.log {
    daily
    rotate 7
    missingok
    compress
    delaycompress
    notifempty
    create 660 mysql mysql
    sharedscripts
    postrotate
        /usr/bin/mysqladmin -u root -p你的密码 flush-logs
    endscript
}

注意:你的密码 替换为MySQL的root密码。
如果不希望密码明文写在文件里,可以改用 ~/.my.cnf 配置。
修改后执行 logrotate -f /etc/logrotate.d/mysql 测试是否生效。

方法二:编写shell脚本 + 宝塔计划任务(推荐新手)

如果不想动系统配置,宝塔自带计划任务功能,能轻松实现定时清理。

  1. 编写清理脚本

在服务器任意目录(例如 /www/server/tools/)新建文件 clean_slow_log.sh,内容如下:

#!/bin/bash
# 清理超过7天的MySQL慢查询日志
LOG_FILE="/www/server/data/mysql-slow.log"
BACKUP_DIR="/www/server/data/backup_slow_log"

# 创建备份目录(可选)
mkdir -p $BACKUP_DIR

# 将当前日志重命名并压缩(可选,便于回溯)
date_str=$(date +%Y%m%d%H%M%S)
mv $LOG_FILE ${BACKUP_DIR}/mysql-slow-${date_str}.log

# 通知MySQL重新生成日志
/usr/bin/mysqladmin -u root -p'你的密码' flush-logs 2>/dev/null

# 删除备份目录中超过7天的文件
find $BACKUP_DIR -name "mysql-slow-*.log*" -mtime +7 -exec rm -f {} \;

记得替换密码,并给脚本执行权限:chmod +x /www/server/tools/clean_slow_log.sh

  1. 在宝塔面板添加计划任务

进入宝塔面板 -> 计划任务 -> 添加任务。
任务类型选“shell脚本”,任务名称填写“定期清理慢查询日志”,执行周期选“每天 02:00”(建议业务低峰期),脚本内容填写:

bash /www/server/tools/clean_slow_log.sh

保存后即可每天自动执行。

避坑指南

  • 密码安全问题:脚本中明文写入root密码存在风险。更安全的方式是创建 .my.cnf 文件:在MySQL用户家目录(通常是 /root)下创建 ~/.my.cnf,内容为:
  [client]
  user=root
  password=你的密码

并设置权限 chmod 600 ~/.my.cnf
这样 mysqladmin 命令会自动读取,无需在脚本里写密码。

  • flush-logs 不会删除旧日志:它只让MySQL关闭当前日志文件并新建一个。旧文件需要自己手动删除(脚本中已用find清理)。
  • 慢查询日志文件路径不一致:如果MySQL版本或自定义配置不同,请通过 SHOW VARIABLES LIKE 'slow_query_log_file'; 确认。
  • 计划任务是否执行:可以在宝塔计划任务日志里查看每次执行的结果,或手动执行一次脚本测试。

效果验证方法

  1. 查看日志文件是否被处理:执行一天后,检查 /www/server/data/backup_slow_log/ 目录下是否有以日期命名的日志备份。
  2. 查看MySQL当前慢查询日志是否正常:登录MySQL,执行 SHOW VARIABLES LIKE 'slow_query_log_file';,确认文件路径正确且存在。
  3. 检查磁盘空间:运行 df -h,观察 / 或数据盘使用率无异常增长。

如果你同时运行多语言外贸站,建议定期检查慢查询日志内容,针对重复出现的慢SQL做索引优化,从源头减少日志体积。

常见问题

Q:flush-logs时提示Access denied?
A:脚本中使用的MySQL用户必须拥有RELOAD权限。如果使用root,检查密码是否正确;如果使用普通用户,执行 GRANT RELOAD ON *.* TO '用户名'@'localhost';

Q:计划任务运行但没有生成备份?
A:先手动执行脚本:bash /www/server/tools/clean_slow_log.sh 查看输出错误信息。最常见的是路径不对或权限不足(MySQL无法写入备份目录)。

Q:慢查询日志本身非常大,第一次清理怎么办?
A:建议先手动备份一份(cp mysql-slow.log mysql-slow.bak),然后直接清空日志文件:> /www/server/data/mysql-slow.log,再执行 mysqladmin flush-logs。这样不会中断MySQL服务。

通过以上方法,外贸站长可以轻松实现MySQL慢查询日志的自动化管理,避免日志堆积导致服务器故障。
如果你需要进一步优化外贸网站的数据库性能,欢迎继续探索索引优化和查询缓存配置。

分享到:
上一篇
跨境独立站服务器内网穿透多级代理搭建全攻略
下一篇
家用住宅主机Linux进程100%CPU占用排查命令
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意