删除BigLog的姿势开篇
对binlog文件的维护和管理,是mysql主从复制运维场景常见的维护操作之一,当BinLOG日志文件很大、很多,快把硬盘撑爆了,怎么办?如何正确的删除binlog?如果随便删除binlog,可能会给数据库带来未知的影响,经过笔者研究和测试,现分享2个不同场景下正确删除binlog的方法
官方二进制文档:https://dev.mysql.com/doc/refman/8.0/en/purge-binary-logs.html
官方PURGE BINARY LOGS 语句参考文档:https://dev.mysql.com/doc/refman/8.0/en/purge-binary-logs.html
场景1:不需要binlog
场景说明:
假设是本地开发环境的单机MySQL8,也比如不需要用于以后做数据恢复、不需要改造为主从环境做数据复制的MySQL环境,那么都可以不启用BinLog记录。但是,当你在本地开发环境安装好单机的MySQL8且运行了一段时间后,发现居然有很多的binlog,那是因为MySQL8默认就是开启binlog记录的。假设,既然是单机又是本地开发环境,且又不想开启binlog记录,那就关闭它呗!那关闭后,“残留”的binlog日志文件怎么办?看笔者的测试就知道哈。最后再罗嗦一下,其实关闭binlog,对mysql的性能方面是会有所提高的,比如在本地开发环境的时候,对mysql的性能要运行的更快,那么除了将数据放在高端磁盘阵列上或者SSD盘上,还有一个方式,就是关闭binlog。
可以看到,通过查看全局变量log_bin的状态已经为OFF,说明已经处于关闭状态
mysql> show global variables like "%log_bin%";
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+-------+
5 rows in set (0.00 sec)
说明:笔者这里已经将binlog记录关闭了,关于binlog的开启和关闭,后续笔者再向盆友们分享经验,希望你继续保持对我的关注哦!
在mysql的shell中,查看binlog文件列表时,它会提示error,告诉你没有启用binlog呢
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging
binlog已经处于关闭,那么在系统层面查看“残留”的binlog日志文件
[root@mysql8db ~]# ls -l /home/mysqlData/
total 188988
-rw-r----- 1 mysql mysql 179 Mar 30 20:43 binlog.000036
-rw-r----- 1 mysql mysql 704 Mar 30 21:11 binlog.000037
-rw-r----- 1 mysql mysql 346 Apr 1 15:25 binlog.000038
-rw-r----- 1 mysql mysql 179 Apr 1 15:25 binlog.000039
-rw-r----- 1 mysql mysql 4904 Apr 6 11:23 binlog.000040
-rw-r----- 1 mysql mysql 179 Apr 6 11:23 binlog.000041
-rw-r----- 1 mysql mysql 18058 Apr 7 09:07 binlog.000042
-rw-r----- 1 mysql mysql 179 Apr 7 09:07 binlog.000043
-rw-r----- 1 mysql mysql 156 Apr 8 09:30 binlog.000044
-rw-r----- 1 mysql mysql 179 Apr 8 09:30 binlog.000045
-rw-r----- 1 mysql mysql 2808 Apr 11 09:22 binlog.000046
-rw-r----- 1 mysql mysql 179 Apr 11 09:22 binlog.000047
-rw-r----- 1 mysql mysql 349 Apr 11 18:21 binlog.000048
-rw-r----- 1 mysql mysql 179 Apr 11 18:21 binlog.000049
-rw-r----- 1 mysql mysql 179 Apr 16 22:10 binlog.000050
-rw-r----- 1 mysql mysql 179 Apr 20 14:57 binlog.000051
-rw-r----- 1 mysql mysql 1256 Apr 24 15:37 binlog.000052
-rw-r----- 1 mysql mysql 179 Apr 24 15:37 binlog.000053
-rw-r----- 1 mysql mysql 179 Apr 29 14:14 binlog.000054
-rw-r----- 1 mysql mysql 179 Apr 29 14:40 binlog.000055
-rw-r----- 1 mysql mysql 179 Apr 29 15:15 binlog.000056
-rw-r----- 1 mysql mysql 179 Apr 29 15:15 binlog.000057
-rw-r----- 1 mysql mysql 179 Apr 29 15:17 binlog.000058
-rw-r----- 1 mysql mysql 179 Apr 29 15:19 binlog.000059
-rw-r----- 1 mysql mysql 384 Apr 29 15:19 binlog.index
重头戏来了,如何删除这些“残留”的binlog?
答案就是:直接手动删除,干它就对了!!!
删除套路如下:
# 1. 先删除binlog索引文件,也就是binlog.index文件
[root@mysql8db mysqlData]# rm -f binlog.index
# 2. 再删除binlog.0000xxx文件
[root@mysql8db mysqlData]# rm -f binlog.0000*
场景2:需要binlog
关于场景2,说白了就是需要启用或者已经是启用了binlog的场景,比如生产环境上的MySQL主从环境,那么binlog撑爆磁盘空间,又该如何正确的、安全的进行删除释放空间?敬请关注明天的经验分享,因笔者时间有限,今晚就此搁笔,感谢您的观看。




