「MySQL」 MySQL v8.0 binlog 保存时长设置

618 前,在某东项目上遇到了一个磁盘满导致程序崩溃的问题。通过检查磁盘容量,发现三套系统跑起来的数据库容量一般(不至于导致磁盘满),继续分析发现MySQL 数据Data目录下的binlog 保存了默认30天,其中在大促期间,所占空间接近200G内存, 所以在网上寻找解决办法,并记录下来,方便以后作为参考。

binlog简单介绍

MySQL的binlog日志作用是用来记录MySQL内部增删改查等对MySQL数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录;主要用于数据库的主从复制以及增量恢复。

解决方案

在MySQL 中可以通过启用禁用log-bin功能或者更改存储binlog的时间来减少存储。我在项目上是将默认的30天更改为了7天以达到目的。

步骤说明

1. DOS命令登录到MySQL

在登录工程中遇到了一个1045 无法登录error,如下图:

「MySQL」 MySQL v8.0 binlog 保存时长设置

解决方法:需要在my.ini [mysqld]  下添加 skip-grant-tables, 其中my.ini路径如下图所示:

「MySQL」 MySQL v8.0 binlog 保存时长设置

my.ini 中修改位置如下图所示:

「MySQL」 MySQL v8.0 binlog 保存时长设置

 保存后,重新启动MySQL服务(默认服务名称为MySQL80),但是在重启过程中遇到服务会启动失败的情况(不明原因),把上述添加的skip-grant-tables 去掉就成功启动了,同样DOS可以可以登录MySQL了,如图:

「MySQL」 MySQL v8.0 binlog 保存时长设置

2. 查看MySQL binlog 配置

通过show variables like 'expire_logs_days';  查看当前数据库存储binlog 的天数,如下图:

「MySQL」 MySQL v8.0 binlog 保存时长设置

更改通过set 指令进行修改,但是需要通过8.0新的变量名称进行修改, set global binlog_expire_logs_seconds= ****;  修改。 其中我在项目上修改为7天= 604800秒, 如下图:

「MySQL」 MySQL v8.0 binlog 保存时长设置

更改后需要flush log进行清理超出存储时长的log日志, 指令为flush logs;这样就可以成功修改binlog的存储时长日志了