最近发现mysql数据库中binlog日志文件增加迅速,100GB的硬盘直接被塞满,导致博客无法正常访问,遂查询了谷歌,所以才有了这篇文章。
注意:如果你对mysql数据库的恢复功能非常需要,不建议禁用,缩短过期时间即可!
Binlog是什么?
Binlog(Binary Log) 是MySQL数据库中的二进制日志文件,用于记录数据库的所有更改操作。它以二进制的形式存储,包含了对数据库执行的所有修改操作的详细信息,如插入、更新、删除等。Binlog是MySQL事务日志的一部分,与Redo Log(重做日志)一起,确保数据库的一致性、持久性,以及提供一些关键的数据库管理功能。
Binlog的作用
1.数据恢复
Binlog记录了数据库的历史变更,通过重放Binlog中的事件,可以将数据库还原到特定的时间点。这对于恢复误删数据、应对错误的批量操作等情况非常有用。
2.主从复制
在主从复制中,主服务器将所有的更改记录到Binlog中,而从服务器通过读取主服务器的Binlog并执行相同的更改来保持数据同步。这实现了数据的复制和冗余,提高了系统的可用性和可靠性。
3.点对点复制
类似于主从复制,但点对点复制允许多个服务器之间相互复制数据,而不仅限于主从关系。Binlog在这种情况下发挥着关键的作用,确保不同服务器之间的数据同步。
4.数据库备份
Binlog也是数据库备份的一部分。通过备份Binlog,可以实现增量备份,只备份自上次完整备份以来发生的变更,从而减少备份的时间和存储成本。
5.审计与监控
Binlog记录了数据库中的每个事务操作,包括操作的时间、执行者等信息。这对于审计数据库的访问记录、监控数据库的活动非常有帮助。
禁用Binlog
Mysql默认启用Binlog
打开MySQL的配置文件,通常是my.cnf
在配置文件后添加
skip-bin-log 或者:disable-bin-log
重启数据库
sudo service mysql restart
查看是否禁用成功,打开数据库的终端
SHOW VARIABLES LIKE 'log_bin';
如果输出显示 log_bin 的值为 OFF,则表示Binlog已成功禁用
手动删除Binlog
binlog文件通常在mysql的data目录下
打开binlog.index(二进制日志索引),删除除最后一行的其他内容,如图所示

然后你就可以把对应的binlog文件删除,保留最后一个即可

设置Binlog过期时间
在mysql数据库使用终端,1panel可直接连接

出现mysql> 后,输入以下命令查询binlog过期时间
show variables like '%binlog_expire%';
binlog_expire_logs_auto_purge:是否自动清理
binlog_expire_logs_seconds:多长时间清理一次,单位为秒(MySQL 8)
expire_logs_days:多长时间清理一次,单位为天(MySQL 7或更低版本)
默认的binlog过期时间为2592000秒,也就是30天,使用以下命令可以将binlog过期时间设置为1天(MySQL 8),也可以根据需要自定义时间
set global binlog_expire_logs_seconds=86400; set persist binlog_expire_logs_seconds=86400;

再次查询binlog过期时间可以看到已经被更改

手动刷新过期日志
flush logs;

相关说明
- 在测试和开发环境中,可能不需要启用Binlog,以减少日志记录对性能的影响,并简化系统的配置。
- 在一些需要追求极致性能的场景下,可以临时禁用Binlog。例如,进行大批量数据加载时,禁用Binlog可以提高数据加载的速度。
- 在一些对磁盘空间要求较为严格的情况下,禁用Binlog可以减少对磁盘空间的占用。
- 某些业务场景可能不要求数据的持久性,因此可以考虑禁用Binlog以提高性能。
禁用Binlog会导致数据库失去了数据恢复和复制的能力,因此在正式生产环境中,禁用Binlog需要慎重考虑,并确保在业务需求和系统要求下做出明智的选择。
发布者:木木,转载请注明出处:https://blog.huzz.cn/10055.html
微信
支付宝