宝塔面板中MySQL Binlog日志占用磁盘空间的清理方法有四种:一、通过SET GLOBAL expire_logs_days=7并修改my.cnf永久生效;二、用PURGE BINARY LOGS手动按文件名或时间清理;三、在宝塔计划任务中添加Shell脚本定时执行PURGE命令;四、MySQL 8.0.11+可配置binlog_expire_logs_seconds和max_binlog_size实现秒级精准控制。

如果您在宝塔面板中运行MySQL服务,但发现磁盘空间被大量Binlog日志持续占用,则可能是由于Binlog未设置自动清理机制。以下是配置MySQL Binlog日志清理策略的具体步骤:
一、通过MySQL命令行设置全局过期时间
该方法直接修改MySQL服务器的系统变量,控制Binlog文件保留时长,适用于所有MySQL版本(5.7及以上推荐使用)。设置后,MySQL会自动删除超过指定天数的Binlog文件。
1、登录宝塔面板,点击左侧菜单【数据库】→【phpMyAdmin】,或通过SSH连接服务器执行命令:mysql -u root -p,输入密码进入MySQL命令行。
2、执行查询语句确认当前设置:SHOW VARIABLES LIKE 'expire_logs_days';
3、设置Binlog自动清理为7天(可根据需要调整为3、14等整数值):SET GLOBAL expire_logs_days = 7;
4、为确保重启后生效,需同步修改MySQL配置文件:/www/server/mysql/my.cnf,在[mysqld]段落下添加一行:expire_logs_days = 7。
二、使用PURGE BINARY LOGS命令手动清理
该方法适用于临时释放磁盘空间,或在不重启服务的前提下立即删除指定范围内的Binlog文件。操作即时生效,但不具备持久性,需配合定时任务实现周期性清理。
1、进入MySQL命令行,执行以下命令查看当前Binlog列表:SHOW BINARY LOGS;
2、根据文件名和File_size判断可清理的旧日志,例如删除早于mysql-bin.000012的所有日志:PURGE BINARY LOGS TO 'mysql-bin.000012';
3、也可按时间清理:删除2024-05-01 00:00:00之前生成的所有Binlog:PURGE BINARY LOGS BEFORE '2024-05-01 00:00:00';
三、在宝塔计划任务中添加自动清理脚本
该方法通过Linux定时任务调用Shell脚本,结合MySQL客户端执行清理指令,适合需要精确控制执行时间、保留数量或附加日志记录的场景。
1、创建清理脚本文件:/www/server/panel/script/clean_binlog.sh,内容如下:#!/bin/bash\nmysql -uroot -p$(cat /www/server/panel/database/default.pl) -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"
2、赋予脚本执行权限:chmod +x /www/server/panel/script/clean_binlog.sh
3、进入宝塔面板【计划任务】→【添加计划任务】,选择“Shell脚本”,执行周期设为每天凌晨2点,脚本内容填写:/www/server/panel/script/clean_binlog.sh
四、调整Binlog保留数量而非时间
MySQL 8.0.11及以上版本支持基于文件数量的清理策略,通过binlog_expire_logs_seconds替代旧参数,可更精准控制磁盘占用上限。
1、确认MySQL版本:mysql --version,若为8.0.11+,优先使用该方式。
2、编辑配置文件/www/server/mysql/my.cnf,在[mysqld]段落下添加:binlog_expire_logs_seconds = 604800(即7天,单位为秒)。
3、同时可限制最大Binlog总大小(需配合max_binlog_size):max_binlog_size = 100M,并确保binlog_format = ROW已启用。
4、保存后重启MySQL服务:systemctl restart mysqld或在宝塔面板【软件商店】中点击MySQL右侧【重启】按钮。










