我的磁盘充满了 binlog 文件

ML6*_*L61 8 mysql ubuntu log mysql-8.0

我刚刚意识到我的服务器每天增长 2 GB,这不正常。

我查看了我的文件夹,文件夹 /var/lib/mysql 达到了 26 GB

一般情况下应该是4GB左右

一个月前,我将 MySQL 5.7 数据库迁移到 MySQL 8.0

我认为我的磁盘充满了 binlog 文件。

我想知道为什么这些文件突然变大了?

如何在不损坏数据库的情况下修复此问题?

total 26511376
-rw-r----- 1 mysql mysql         56 Aug 19  2018  auto.cnf
-rw-r----- 1 mysql mysql        178 Mar 10 06:07  binlog.000001
-rw-r----- 1 mysql mysql   73883481 Mar 10 06:25  binlog.000002
-rw-r----- 1 mysql mysql   58601919 Mar 10 13:13  binlog.000003
-rw-r----- 1 mysql mysql  178322334 Mar 11 06:25  binlog.000004
-rw-r----- 1 mysql mysql  379019579 Mar 12 06:25  binlog.000005
-rw-r----- 1 mysql mysql 1075214425 Mar 13 02:10  binlog.000006
-rw-r----- 1 mysql mysql  710899072 Mar 13 06:25  binlog.000007
-rw-r----- 1 mysql mysql 1073746776 Mar 13 20:15  binlog.000008
-rw-r----- 1 mysql mysql  616483095 Mar 14 06:25  binlog.000009
-rw-r----- 1 mysql mysql 1073836859 Mar 15 00:38  binlog.000010
-rw-r----- 1 mysql mysql 1074301774 Mar 15 03:52  binlog.000011
-rw-r----- 1 mysql mysql 1073936970 Mar 15 04:10  binlog.000012
-rw-r----- 1 mysql mysql 1073793229 Mar 15 04:43  binlog.000013
-rw-r----- 1 mysql mysql  324536092 Mar 15 06:25  binlog.000014
-rw-r----- 1 mysql mysql 1074204920 Mar 15 11:00  binlog.000015
-rw-r----- 1 mysql mysql 1074309915 Mar 16 01:10  binlog.000016
-rw-r----- 1 mysql mysql  323166533 Mar 16 06:25  binlog.000017
-rw-r----- 1 mysql mysql  290236337 Mar 16 20:46  binlog.000018
-rw-r----- 1 mysql mysql  236901439 Mar 17 06:25  binlog.000019
-rw-r----- 1 mysql mysql  480168672 Mar 18 06:25  binlog.000020
-rw-r----- 1 mysql mysql  709223503 Mar 19 06:25  binlog.000021
-rw-r----- 1 mysql mysql 1074813984 Mar 19 17:17  binlog.000022
-rw-r----- 1 mysql mysql 1073759979 Mar 20 04:20  binlog.000023
-rw-r----- 1 mysql mysql  272250245 Mar 20 06:25  binlog.000024
-rw-r----- 1 mysql mysql 1073741888 Mar 20 10:48  binlog.000025
-rw-r----- 1 mysql mysql 1075360653 Mar 20 16:33  binlog.000026
-rw-r----- 1 mysql mysql 1073743148 Mar 21 05:25  binlog.000027
-rw-r----- 1 mysql mysql  540261003 Mar 21 06:25  binlog.000028
-rw-r----- 1 mysql mysql  824878670 Mar 22 06:25  binlog.000029
-rw-r----- 1 mysql mysql  648554142 Mar 23 06:25  binlog.000030
-rw-r----- 1 mysql mysql 1015179916 Mar 24 06:25  binlog.000031
-rw-r----- 1 mysql mysql 1073772614 Mar 24 15:00  binlog.000032
-rw-r----- 1 mysql mysql 1073750944 Mar 25 00:09  binlog.000033
-rw-r----- 1 mysql mysql 1074307838 Mar 25 01:18  binlog.000034
-rw-r----- 1 mysql mysql   49166468 Mar 25 06:25  binlog.000035
-rw-r----- 1 mysql mysql 1074699799 Mar 25 09:13  binlog.000036
-rw-r----- 1 mysql mysql  896120152 Mar 25 16:15  binlog.000037
-rw-r----- 1 mysql mysql      11512 Mar 25 16:21  binlog.000038
-rw-r----- 1 mysql mysql      83159 Mar 25 16:40  binlog.000039
-rw-r----- 1 mysql mysql        624 Mar 25 16:21  binlog.index
-rw------- 1 mysql mysql       1679 Mar 10 05:58  ca-key.pem
-rw-r--r-- 1 mysql mysql       1107 Mar 10 05:58  ca.pem
-rw-r--r-- 1 mysql mysql       1107 Mar 10 05:58  client-cert.pem
-rw------- 1 mysql mysql       1675 Mar 10 05:58  client-key.pem
-rw-r--r-- 1 mysql mysql          0 Jan 24 07:58  debian-5.7.flag
-rw-r----- 1 mysql mysql      18030 Mar 25 16:15  ib_buffer_pool
-rw-r----- 1 mysql mysql   79691776 Mar 25 16:40  ibdata1
-rw-r----- 1 mysql mysql   50331648 Mar 25 16:40  ib_logfile0
-rw-r----- 1 mysql mysql   50331648 Mar 25 15:25  ib_logfile1
-rw-r----- 1 mysql mysql   12582912 Mar 25 16:21  ibtmp1
drwxr-x--- 2 mysql mysql       4096 Mar 25 16:21 '#innodb_temp'
drwxr-x--- 2 mysql mysql       4096 Mar 10 06:05  mysql
-rw-r----- 1 mysql mysql   37748736 Mar 25 16:40  mysql.ibd
-rw-r--r-- 1 mysql mysql          6 Mar 10 06:05  mysql_upgrade_info
drwxr-x--- 2 mysql mysql       4096 Mar 10 06:04  performance_schema
drwxr-x--- 2 mysql mysql       4096 Mar 10 06:04  phpmyadmin
-rw------- 1 mysql mysql       1675 Mar 10 05:58  private_key.pem
-rw-r--r-- 1 mysql mysql        451 Mar 10 05:58  public_key.pem
-rw-r--r-- 1 mysql mysql       1107 Mar 10 05:58  server-cert.pem
-rw------- 1 mysql mysql       1679 Mar 10 05:58  server-key.pem
drwxr-x--- 2 mysql mysql      12288 Mar 10 06:04  sys
-rw-r----- 1 mysql mysql   13631488 Mar 25 16:40  undo_001
-rw-r----- 1 mysql mysql   13631488 Mar 25 16:40  undo_002
drwxr-x--- 2 mysql mysql     110592 Mar 25 15:25  www_example_com
Run Code Online (Sandbox Code Playgroud)

小智 10

对于 MySQL8,他们默认打开二进制日志记录,并且二进制日志的默认清除(过期/删除)设置为 30 天。

进入 SSH 和 mysql 后,您可以使用以下命令

显示二进制日志

mysql> SHOW BINARY LOGS;
Run Code Online (Sandbox Code Playgroud)

手动清除二进制日志直到某个时刻

mysql> PURGE BINARY LOGS TO 'binlog.000142';
Run Code Online (Sandbox Code Playgroud)

将自动默认清除到期时间从 30 天(默认)更改为 3 天

mysql> SET GLOBAL binlog_expire_logs_seconds = (60*60*24*3);
Query OK, 0 rows affected (0.00 sec)

mysql> SET PERSIST binlog_expire_logs_seconds = (60*60*24*3);
Query OK, 0 rows affected (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

上面的值以秒为单位,即3天以秒为单位=(60秒x 60分钟x 24小时x 3天)


小智 4

尝试使用 PURGE 命令删除二进制日志。供参考:文档

还要更新以下变量binlog_expire_logs_seconds以确保自动删除二进制日志。

我想知道为什么这些文件突然变大了?

一个可能的原因是,直到 MySQL 5.7,expire_logs_days的默认值为10 天但从 MySQL 8.0.11 开始, binlog_expire_logs_seconds的默认值为30。因此日志文件不会定期轮换。如果我错了,请纠正我。