如何解决MySQL Binlog文件大小不断增加的问题?

Tar*_*bsı 18 mysql logging log

MySQL Binlog 文件数量日益增加,其大小以 GB 为单位增加。如何阻止 binlog 文件大小不断增加?它们正在填满磁盘空间。

ver*_*rge 20

对于 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 = 259200;
Query OK, 0 rows affected (0.00 sec)

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

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


小智 16

如果您不需要保留这些二进制日志,您可以在 MySQL 中 \xe2\x80\x9ctrim\xe2\x80\x9d 它们,如下所示:

\n
mysql> PURGE BINARY LOGS BEFORE '2021-01-01 00:00:00';\n
Run Code Online (Sandbox Code Playgroud)\n

当然,您可以将日期更改为您想要的任何时间。如果您想修剪到特定的二进制日志文件,可以这样做:

\n
mysql> PURGE BINARY LOGS TO 'mysql-bin.12345';\n
Run Code Online (Sandbox Code Playgroud)\n

请务必指定您要修剪到的实际文件。

\n

重要信息:不要简单地从文件系统中删除文件。MySQL 在将来的某个时候会以一种可怕的方式抱怨。使用 PURGE BINARY LOGS MySQL 内部的命令可以节省不必要的停机时间。

\n


小智 10

复制和某些形式的备份需要二进制日志。听起来你也没有做。

为了更改设置,我喜欢添加一个新文件,例如(其中“rj”是我的姓名缩写):

/etc/mysql/mysql.conf.d/rj.cnf
Run Code Online (Sandbox Code Playgroud)

并进行覆盖,如下所示。在里面。进行更改后,

sudo systemctl restart mysql
Run Code Online (Sandbox Code Playgroud)

log_bin控制binlog的创建。

要保持它们被清除,请添加binlog_expire_logs_seconds = 86400(或其他数字)。

另一个设置控制每个 binlog 文件的最大大小;这不会影响所使用的总磁盘空间,除了最后一个文件将保留到“过期”为止。任何重新启动(或重新启动 mysql)后都会启动新的 binlog,因此您可能会看到很多小文件。

所以,我的 rj.cnf 文件可能包含以下一些内容:

# Added by Rick James
[mysqld]
log_bin =                           # turn off
binlog_expire_logs_seconds = 86400  # 1 day
max_binlog_size = 104857600         # 100M
Run Code Online (Sandbox Code Playgroud)

  • 我在 MariaDB 数据库服务上使用 Galera 复制,所以我想我需要这些文件。在复制中使用 binlog_expire_logs_seconds 是否安全? (2认同)