MySQL 的二进制日志文件(binlog - 删除操作


你这些是 MySQL 的二进制日志文件(binlog)可以安全删除,但绝对不能直接用 rm 命令手动删除!

一、先搞清楚:binlog 是什么?

binlog 是 MySQL 的核心日志,记录了所有修改数据库数据的操作(增/删/改),主要用途: 1. 数据恢复 2. 主从数据库同步 你的场景是 Django 博客单机部署,没有主从复制,这些旧 binlog 完全没用,占了大量磁盘空间,可以清理。


二、✅ 安全删除方法(MySQL 官方推荐,唯一正确方式)

步骤1:登录 MySQL 查看正在使用的 binlog

正在写入的 binlog 绝对不能删,先查出来:

# 登录 MySQL(输入你的 MySQL 密码)
mysql -u root -p

登录后执行命令:

SHOW MASTER STATUS;

输出示例:

File             Position  Binlog_Do_DB  Binlog_Ignore_DB
binlog.000043     123456

👉 这里的 binlog.000043 就是当前正在使用的文件,保留它


步骤2:执行清理命令

有两种常用清理方式,选一种即可:

方式1:清理到指定文件(推荐)

清理所有早于 binlog.000043 的日志(也就是删除 000041、000042):

PURGE BINARY LOGS TO 'binlog.000043';
方式2:按时间清理(比如清理7天前的所有日志)
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);

执行完成后,退出 MySQL:

exit;

三、❌ 严禁操作:不要直接用 rm 删除!

直接执行 rm binlog.000041 会导致: 1. MySQL 的索引文件(mysql-bin.index)记录和实际文件不一致 2. 可能导致 MySQL 报错、无法启动 3. 后续日志滚动异常


四、🔧 永久解决:配置自动清理(一劳永逸)

手动清理太麻烦,直接配置 MySQL 自动删除过期 binlog: 1. 编辑 MySQL 配置文件

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  1. [mysqld] 段落下方添加两行配置:
# 自动清理 7 天前的 binlog
expire_logs_days = 7
# 单个 binlog 最大 500M,超过自动生成新文件
max_binlog_size = 500M
  1. 重启 MySQL 生效
sudo systemctl restart mysql

总结

  1. 你的 binlog.000041/42 可以删,000043 是当前在用的,保留;
  2. 必须用 PURGE BINARY LOGS 命令清理,禁止 rm
  3. 配置自动清理后,再也不用手动删日志了。