MySQL二进制日志的作用与禁用影响
TOPIC SOURCE
解决LNMP环境mysql日志导致磁盘占用高的问题
在一次服务器磁盘告急的现场,排查的第一步竟是看不到的二进制日志文件。它们悄悄累积在 /var/lib/mysql 目录,名字像 mysql-bin.000001,却承载着复制、恢复甚至审计的关键信息。
二进制日志的核心职能
MySQL 将每一次事务的变更以事件流的形式写入 binlog,随后可以被主从复制线程读取,实现数据的实时同步;在出现故障时,管理员可以依据 binlog 进行点时间恢复(PITR),把数据库回滚到恰好发生错误的前一秒;此外,审计系统也可以通过解析 binlog 捕获数据层面的操作痕迹,而无需在业务层额外埋点。
禁用二进制日志的直接后果
- 复制链路立刻失效,新增从库无法再追上主库的写入。
- 点时间恢复失去根基,灾难恢复只能回滚到最近一次全备份。
- 审计需求只能转向查询慢日志或通用日志,信息不完整且开销更大。
- 磁盘占用会显著下降,但缺乏历史变更记录的代价往往超过空间的收益。
实战案例:小型站点的取舍
一个月访问量只有几千的个人博客,业务基本是读操作,作者更在意磁盘配额。关闭 binlog 后,磁盘空间恢复了近 80%,但如果突然出现误删文章的情况,唯一的救命稻草只能是最近一次手动导出的 SQL 文件。
如果决定保留 binlog,却又不想让它无限膨胀,可以在 my.cnf 中加入下面的配置,让日志自动过期:
[mysqld]
log-bin=mysql-bin
expire_logs_days=7 # 保留最近 7 天的二进制日志
binlog_format=row
二进制日志不是“可有可无”的装饰,而是数据安全的隐形护盾。
权衡磁盘空间与容灾能力的抉择,往往在一行命令的注释符后悄然决定。

参与讨论
二进制日志确实重要,关掉后恢复数据就麻烦了
之前把binlog关了结果误删数据,差点悲剧
expire_logs_days=7这个配置很实用,收藏了
主从复制全靠binlog,禁用的话从库就废了吧?
个人博客关掉binlog确实能省空间,但风险也不小
审计用binlog比慢日志详细多了,就是占地方🤔
有次服务器磁盘满了,发现全是binlog文件,删掉立马腾出几十G