必须用PURGE BINARY LOGS命令安全清理binlog,严禁rm删除;操作前须确认log_bin=ON、核对所有从库Relay_Master_Log_File最小值以确定安全下限,并在MySQL 8.0+中启用binlog_expire_logs_seconds、禁用expire_logs_days。

直接进 MySQL 执行 PURGE BINARY LOGS,别用 rm 删文件——否则 mysql-bin.index 不同步,MySQL 启动可能跳日志、报错甚至主从断裂。
先确认是不是 binlog 真的占满了磁盘
看到 Disk is full writing './mysql-bin.002570' (OS errno 28) 这类错误,不代表一定是 /var/lib/mysql 满了,得验证:
- 运行
df -h /var/lib/mysql,看使用率是否 ≥95%;如果不是,再查df -h /tmp和df -h /var/log - 查 MySQL 实际日志路径:
SHOW VARIABLES LIKE 'datadir';和SHOW VARIABLES LIKE 'log_bin_basename';,避免在错的目录下操作 - 快速定位大文件:
du -sh /var/lib/mysql/mysql-bin.* | sort -hr | head -3,如果单个或累计超几十 GB,基本就是它
PURGE 前必须核对从库位点,否则主从立刻断裂
PURGE BINARY LOGS TO 'mysql-bin.000123' 这种操作不是“删旧文件”,而是“删掉从库已确认不需要的部分”。误删正在被 IO 线程读取的 binlog,从库会卡死且无法自动恢复。
- 主库执行:
SHOW MASTER STATUS;,记下当前File(如mysql-bin.000124)和Position - 从库执行:
SHOW SLAVE STATUS\G,重点看Relay_Master_Log_File和Exec_Master_Log_Pos - 只有当从库的
Relay_Master_Log_File是mysql-bin.000123且Exec_Master_Log_Pos已到该文件末尾,才说明mysql-bin.000123及更早的可安全清理 -
Seconds_Behind_Master = 0不可靠——它只反映 SQL 线程延迟,IO 线程可能还卡在mysql-bin.000122上
执行 PURGE 的两种安全方式及坑点
清理后空间立即释放,无需重启,但命令写错或时区不对会导致删多或删少。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- 按文件名删(推荐):
PURGE BINARY LOGS TO 'mysql-bin.000123';—— 删除所有 早于 该文件的日志(不含mysql-bin.000123本身) - 按时间删(注意时区):
PURGE BINARY LOGS BEFORE '2026-09-28 00:00:00';—— 时间是 MySQL 服务器本地时区,不是 UTC,也不是你本地电脑时区 - 别信
expire_logs_days = 7自动生效:它只在FLUSH LOGS或 MySQL 重启时触发,且绝不删仍在被从库读取的日志 - 删完建议补一句
FLUSH LOGS;,让 MySQL 切新 binlog 文件,避免后续写入继续打在刚 purge 掉的文件索引上
连 MySQL 都连不上时的兜底操作
如果 mysqld 已卡死、socket 拒绝连接,或启动卡在 “Initializing database”,说明磁盘满已阻塞初始化流程。此时不能硬重启。
- 先用
ps aux | grep mysqld确认进程是否存活;再用lsof -p $(pgrep mysqld) | grep deleted查是否有被删但仍被占用的大文件(比如误删的慢日志) - 若进程还在但无法连接,尝试
mysqld_safe --skip-grant-tables &启动跳过权限检查,再连上去执行PURGE - 如果连
mysqld_safe都起不来,说明磁盘满已影响系统级写入(比如/tmp或/var/log满),优先清空slow_query_log_file或截断error_log:echo "" > /var/lib/mysql/hostname-slow.log(前提是已SET GLOBAL slow_query_log = OFF;)
真正棘手的从来不是 binlog 多,而是 ibtmp1 在长事务未提交时暴涨几十 GB 却不释放,或者 innodb_file_per_table = OFF 下 ibdata1 只增不减——这些情况 PURGE BINARY LOGS 无效,得另走路径。










