MySQL 清理binlog二进制文件
我先进数据库里面查询一下
-rw-r----- 1 mysql mysql 56 Oct 30 2023 auto.cnf
-rw-r----- 1 mysql mysql 1073741981 Jul 22 02:28 binlog.000223
-rw-r----- 1 mysql mysql 1073743137 Jul 23 00:05 binlog.000224
-rw-r----- 1 mysql mysql 1073765302 Jul 23 21:41 binlog.000225
-rw-r----- 1 mysql mysql 1073743399 Jul 24 19:16 binlog.000226
-rw-r----- 1 mysql mysql 1073743449 Jul 25 16:44 binlog.000227
-rw-r----- 1 mysql mysql 1073752603 Jul 26 14:25 binlog.000228
-rw-r----- 1 mysql mysql 1073743692 Jul 27 12:27 binlog.000229
-rw-r----- 1 mysql mysql 1073755283 Jul 28 09:55 binlog.000230
-rw-r----- 1 mysql mysql 1073742073 Jul 29 07:22 binlog.000231
-rw-r----- 1 mysql mysql 1073790832 Jul 30 05:24 binlog.000232
-rw-r----- 1 mysql mysql 1073742038 Jul 31 02:59 binlog.000233
-rw-r----- 1 mysql mysql 1073741902 Aug 1 00:48 binlog.000234
-rw-r----- 1 mysql mysql 1073741976 Aug 1 22:57 binlog.000235
-rw-r----- 1 mysql mysql 1073742887 Aug 2 21:02 binlog.000236
-rw-r----- 1 mysql mysql 1073742213 Aug 4 05:03 binlog.000237
-rw-r----- 1 mysql mysql 1073742500 Aug 5 03:39 binlog.000238
-rw-r----- 1 mysql mysql 1073742248 Aug 11 06:23 binlog.000239
-rw-r----- 1 mysql mysql 1073741907 Aug 11 19:48 binlog.000240
-rw-r----- 1 mysql mysql 1073849347 Aug 12 09:14 binlog.000241
-rw-r----- 1 mysql mysql 1073742574 Aug 12 23:39 binlog.000242
-rw-r----- 1 mysql mysql 1073743349 Aug 13 23:46 binlog.000243
-rw-r----- 1 mysql mysql 1073741887 Aug 15 00:26 binlog.000244
-rw-r----- 1 mysql mysql 1073742052 Aug 16 01:00 binlog.000245
-rw-r----- 1 mysql mysql 1073744211 Aug 17 01:12 binlog.000246
-rw-r----- 1 mysql mysql 1073742019 Aug 18 01:26 binlog.000247
-rw-r----- 1 mysql mysql 1073743083 Aug 18 23:32 binlog.000248
-rw-r----- 1 mysql mysql 1073742195 Aug 19 21:53 binlog.000249
-rw-r----- 1 mysql mysql 598642284 Aug 20 10:45 binlog.000250
-rw-r----- 1 mysql mysql 2888719 Aug 20 10:50 binlog.000251
-rw-r----- 1 mysql mysql 464 Aug 20 10:45 binlog.index
-rw------- 1 mysql mysql 1676 Oct 30 2023 ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Oct 30 2023 ca.pem
-rw-r--r-- 1 mysql mysql 1112 Oct 30 2023 client-cert.pem
-rw------- 1 mysql mysql 1676 Oct 30 2023 client-key.pem
-rw-r----- 1 mysql mysql 196608 Aug 20 10:50 #ib_16384_0.dblwr
-rw-r----- 1 mysql mysql 8585216 Aug 20 10:34 #ib_16384_1.dblwr
-rw-r----- 1 mysql mysql 18300 Aug 20 10:45 ib_buffer_pool
-rw-r----- 1 mysql mysql 79691776 Aug 20 10:50 ibdata1
-rw-r----- 1 mysql mysql 12582912 Aug 20 10:45 ibtmp1
drwxr-x--- 2 mysql mysql 4096 Aug 20 10:49 #innodb_redo
drwxr-x--- 2 mysql mysql 4096 Aug 20 10:45 #innodb_temp
drwxr-x--- 2 mysql mysql 4096 Oct 30 2023 mysql
-rw-r----- 1 mysql mysql 30408704 Aug 20 10:45 mysql.ibd
srwxrwxrwx 1 mysql mysql 0 Aug 20 10:45 mysql.sock
-rw------- 1 mysql mysql 6 Aug 20 10:45 mysql.sock.lock
-rw-r----- 1 mysql mysql 6 Oct 30 2023 mysql_upgrade_info
drwxr-x--- 2 mysql mysql 4096 Oct 30 2023 performance_schema
-rw------- 1 mysql mysql 1676 Oct 30 2023 private_key.pem
-rw-r--r-- 1 mysql mysql 452 Oct 30 2023 public_key.pem
-rw-r--r-- 1 mysql mysql 1112 Oct 30 2023 server-cert.pem
-rw------- 1 mysql mysql 1676 Oct 30 2023 server-key.pem
drwxr-x--- 2 mysql mysql 12288 Oct 30 2023 sys
-rw-r----- 1 mysql mysql 67108864 Aug 20 10:50 undo_001
-rw-r----- 1 mysql mysql 50331648 Aug 20 10:50 undo_002
drwxr-x--- 2 mysql mysql 12288 Oct 31 2023 zabbix
mysql> show variables like 'binlog_expire_logs_seconds';
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| binlog_expire_logs_seconds | 2592000 |
+----------------------------+---------+
1 row in set (0.01 sec)
发现binlog_expire_logs_seconds是保留30天的binlog,再看看expire_logs_days
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
1 row in set (0.00 sec)
expire_logs_days 和 binlog_expire_logs_seconds 都是用于控制 MySQL 二进制日志文件保留时间的参数
expire_logs_days:
单位: 以天为单位。
功能: 指定二进制日志文件可以保留的天数。一旦超过这个期限,MySQL 将自动删除旧的二进制日志文件。
状态: 已被弃用,不再推荐使用。在新的 MySQL 版本中,建议使用下一个参数。
binlog_expire_logs_seconds:
单位: 以秒为单位。
功能: 指定二进制日志文件可以保留的秒数。一旦超过这个期限,MySQL 将自动删除旧的二进制日志文件。
替代方案: 是取代 expire_logs_days 参数的新参数,用来设置二进制日志文件的过期时间。
再查看一下max_binlog_size的大小
mysql> show variables like 'max_binlog_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+
1 row in set (0.00 sec)
发现是1073741824 ,也就是1GB
我开始修改binlog_expire_logs_seconds 为3天
mysql> SET GLOBAL binlog_expire_logs_seconds = 259200;
Query OK, 0 rows affected (0.00 sec)
但是要从你设置259200秒才开始计算3天 ,也就是说等3天后才执行删除。
如果不想等了,执行下面的命令:
PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY);
这个命令的含义是删除指定日期之前的所有二进制日志文件只保留3天。
好了!教程结束了。