外贸站宝塔面板定时清理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脚本 + 宝塔计划任务(推荐新手)
如果不想动系统配置,宝塔自带计划任务功能,能轻松实现定时清理。
- 编写清理脚本
在服务器任意目录(例如 /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。
- 在宝塔面板添加计划任务
进入宝塔面板 -> 计划任务 -> 添加任务。
任务类型选“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';确认。 - 计划任务是否执行:可以在宝塔计划任务日志里查看每次执行的结果,或手动执行一次脚本测试。
效果验证方法
- 查看日志文件是否被处理:执行一天后,检查
/www/server/data/backup_slow_log/目录下是否有以日期命名的日志备份。 - 查看MySQL当前慢查询日志是否正常:登录MySQL,执行
SHOW VARIABLES LIKE 'slow_query_log_file';,确认文件路径正确且存在。 - 检查磁盘空间:运行
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慢查询日志的自动化管理,避免日志堆积导致服务器故障。
如果你需要进一步优化外贸网站的数据库性能,欢迎继续探索索引优化和查询缓存配置。