删除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撑爆磁盘空间,又该如何正确的、安全的进行删除释放空间?敬请关注明天的经验分享,因笔者时间有限,今晚就此搁笔,感谢您的观看。