游乐游手机版
首页/业界动态/文章详情

MySQL磁盘暴涨110G?binlog清理与主从同步机制详解

时间:2026-06-17 12:41
MySQLbinlog占用110G磁盘空间,主从同步中从库已应用的日志才可安全删除。应通过主库状态与从库复制位点确定清理范围,使用PURGEBINARYLOGSTO命令删除指定文件之前的日志。设置binlog_expire_logs_seconds自动过期策略并持久化配置,可根治堆积问题。

前几天项目同事突然反馈,MySQL的/data盘,500G的空间眼看着就要被撑爆了,仅剩30G。登录服务器一看,好家伙,ls -lh mysql-bin.* 列出来,瞬间心跳加速:

1.1G mysql-bin.000239
1.1G mysql-bin.000240
1.1G mysql-bin.000241
...
1.1G mysql-bin.000338

足足一百多个文件,每个1.1G,加起来接近110G,直接吃掉了磁盘20%的容量。很多人第一反应可能就是直接 rm -rf mysql-bin.*。打住,千万打住!这一步要是手滑,主从复制瞬间崩溃,业务延迟甚至数据不一致,后果不堪设想。

一、先搞清楚:binlog 究竟是做什么用的?

不少开发者提到binlog,第一反应就是“主从同步”。那具体流程是怎样的?其实过程非常清晰:

主库写入 binlog → 从库IO线程拉取 → 写入 relay log → SQL线程重放 → 数据同步完成

这里面有一个关键点:从库已经读取并应用完成的binlog,主库才能安全删除。否则,你会看到从库报出这样的错误:

Could not find first log file name in binary log index file
replication stopped

复制直接中断,这就是随意删除的代价。

二、正确的排查流程(生产级标准步骤)

别急着动手删,先确认几件事。第一步,检查主从同步状态是否正常。

1. 查看主库状态

MySQL 8之前使用 SHOW MASTER STATUS;,MySQL 8+则用 SHOW BINARY LOG STATUS;

2. 查看从库状态

老版本用 SHOW SLAVE STATUS\G,MySQL 8.0.22之后,推荐用 SHOW REPLICA STATUS。输出结果中,有几个字段是重点关注对象:

Source_Log_File
Relay_Source_Log_File

举个例子,如果输出显示 Source_Log_File: mysql-bin.000057,这就意味着从库已经同步到了第57号文件。结论很清楚:57号之前的binlog文件,都可以安全清理掉。

三、安全清理 binlog 的正确操作

1. 错误操作(千万别碰)

直接在操作系统层面 rm -rf mysql-bin.*,后果已经说过,复制必然中断。

2. 正确但不推荐的方式

使用 PURGE BINARY LOGS; 全部清空,这一操作太暴力,生产环境要慎用。

3. 推荐的最佳实践

使用这条命令:PURGE BINARY LOGS TO 'mysql-bin.000057';,含义很清楚:删除57号之前的所有文件。安全、可控,而且立竿见影。

执行完再跑一下 df -h,看着磁盘空间唰地就释放出几十个G,那感觉确实很爽。

四、根治方案:自动过期清理(强烈建议)

很多环境binlog堆积成山的根本原因,就是没有设置过期策略。先看看当前的配置:

binlog 过期时间

SHOW VARIABLES LIKE 'binlog_expire_logs_seconds'; 查看,比如看到 2592000,换算一下:2592000 ÷ 86400 = 30天,也就是保留30天。

单个文件大小

SHOW VARIABLES LIKE 'max_binlog_size'; 默认是1G,所以看到1.1G的文件很正常。

安全写入参数

SHOW VARIABLES LIKE 'sync_binlog';,推荐设置为1,这是生产环境的标配,能有效避免宕机时丢失binlog。

五、生产环境最佳实践

如果遇到空间告急,可以临时调整一下过期时间:

mysql> SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| binlog_expire_logs_seconds | 2592000 |
+----------------------------+---------+
1 row in set (0.06 sec)

mysql> SET GLOBAL binlog_expire_logs_seconds = 604800;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
+----------------------------+--------+
| Variable_name | Value |
+----------------------------+--------+
| binlog_expire_logs_seconds | 604800 |
+----------------------------+--------+
1 row in set (0.01 sec)

但要注意,这种方式重启MySQL后会失效。所以,一定要在配置文件里加上持久化设置:

[mysqld]
log-bin=mysql-bin
binlog_expire_logs_seconds=604800 # 7天
max_binlog_size=512M
sync_binlog=1

推荐策略就是:控制文件大小、设置合理的保留天数、确保写入安全。做到这几点,binlog空间问题基本就能彻底解决了。

来源:https://www.51cto.com/article/840838.html
上一篇Intel股价一年翻三倍 AI与先进工艺助其走出泥潭 下一篇波斯王子时之砂社区Mod启动 路径追踪光照高精度重制
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
魏牌高山7 SUV版上市 限时27.08万 二合一MPV与SUV
业界动态 · 2026-07-19

魏牌高山7 SUV版上市 限时27.08万 二合一MPV与SUV

魏牌高山7SUV版上市,限时售价27 08万元。车身加长加高,底盘提升30mm,通过性增强。搭载长城Hi4电混技术,零百加速5 7秒,纯电续航206公里。配备双联屏、共轨滑轨及CoffeePilot3辅助驾驶系统,兼顾MPV舒适与SUV通过性。

LPDDR6内存大战已正式打响
业界动态 · 2026-07-19

LPDDR6内存大战已正式打响

三星与SK海力士在ISSCC2026展示各自LPDDR6芯片,该标准刚获JEDEC批准。SK海力士采用1c纳米工艺实现14 4Gbps峰值带宽,三星则侧重能效优化达到12 8Gbps。LPDDR6凭借24位通道与强制ECC,为端侧AI模型提供超两倍于LPDDR5X的带宽,且功耗更低,助力下一代移动端AI应用。

长续航轻薄本体验:标称续航与实际差距多大
业界动态 · 2026-07-19

长续航轻薄本体验:标称续航与实际差距多大

该笔记本重仅984克厚仅14 3毫米,搭载酷睿UltraX7处理器且AI算力高达172TOPS,内置58瓦时电池,在MM30标准下办公续航达16小时、本地视频续航达22小时,支持65瓦氮化镓快充与智慧充电技术,采用3AOLED2 8K分辨率120Hz刷新率屏幕,内置有LTE模块和Wi-Fi7,并通过了军规MIL-STD-810H测试。

聚采网2026年发布燎原geo助力中小商家源头转型
业界动态 · 2026-07-19

聚采网2026年发布燎原geo助力中小商家源头转型

基于燎原系统“标准化内核+本地化服务”模式,针对一二线城市连锁品牌的高阶数据需求与县域中小商家的基础信息管理需求,提供差异化方案。各地配备专属人员,结合支柱产业定制模板,助力不同层级企业实现规范化管理。

李想谈新能源车纯电与增程:不要搞鄙视链
业界动态 · 2026-07-19

李想谈新能源车纯电与增程:不要搞鄙视链

理想汽车创始人李想指出,纯电与增程技术服务于不同用户需求,不应相互贬低或形成能源鄙视链。用户对长途出行无焦虑的偏好应被尊重。当前超40%消费者仍选燃油车,尤其在旗舰SUV市场。新能源车企应反思自身不足,共同做大市场。