侧边栏壁纸
博主头像
一叶舟的秘密花园 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 14 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

清理MySQL-binlog

Li
Li
2025-11-04 / 0 评论 / 0 点赞 / 42 阅读 / 0 字
温馨提示:
八月长江万里晴,千帆一道带风轻

MySQL 的 binlog(二进制日志)文件 随着时间推移会越来越多、占用大量磁盘空间

所以需要定期清理旧的 binlog

下面是清理 binlog 的安全方法和建议做法👇

🧩 一、查看当前 binlog 状态

在 MySQL 控制台执行:

SHOW BINARY LOGS;

可以看到所有 binlog 文件列表和大小。

再看当前正在写入的 binlog:

SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| binlog.000254    |   123456 |              |                  |
+------------------+----------+--------------+------------------+

当前正在写入的是 binlog.000254,只能清理比它旧的文件

🧹 二、安全清理方法(推荐命令)

1️⃣ 按文件名清理

删除某个文件之前的所有 binlog:

PURGE BINARY LOGS TO 'binlog.000250';

👉 表示清理掉 binlog.000249 及更早的文件,保留 binlog.000250 之后的日志。

2️⃣ 按时间清理

删除指定时间点之前的 binlog:

PURGE BINARY LOGS BEFORE '2025-11-01 00:00:00';

👉 比 2025-11-01 00:00:00 更早的 binlog 会被删除。

3️⃣ 设置自动清理策略(推荐配置)

动态设置 MySQL binlog 自动过期清理时间 的命令。

SET GLOBAL binlog_expire_logs_seconds = 604800;

📘 参数解释

参数

说明

SET GLOBAL

修改当前 MySQL 实例的全局参数(运行时生效)

binlog_expire_logs_seconds

控制 binlog 文件保存的时间(单位:秒)

604800

7 天(7 × 24 × 60 × 60 = 604800 秒)

🧠 生效机制

  • 从现在起,MySQL 会自动删除 7 天前生成的 binlog 文件。

  • 不需要重启 MySQL,立即生效。

  • 不会修改配置文件,MySQL 重启后会恢复默认值(除非你写入配置文件)。

💾 若想永久生效,请写入配置文件

编辑 /etc/my.cnf:

[mysqld]
binlog_expire_logs_seconds = 604800

保存后重启服务:

systemctl restart mysqld

🔍 验证当前设置

执行:

SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';

输出应类似:

+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| binlog_expire_logs_seconds | 604800 |
+----------------------------+--------+

0

评论区