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

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

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

答案1

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

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

显示二进制日志

mysql> SHOW BINARY LOGS;

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

mysql> PURGE BINARY LOGS TO 'binlog.000142';

将自动默认清除期限从 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)

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

答案2

如果不需要保留这些二进制日志,则可以在 MySQL 中像这样“修剪”它们:

mysql> PURGE BINARY LOGS BEFORE '2021-01-01 00:00:00';

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

mysql> PURGE BINARY LOGS TO 'mysql-bin.12345';

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

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

答案3

复制和某些形式的备份需要 Binlog。听起来你都没有做这两件事。

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

/etc/mysql/mysql.conf.d/rj.cnf

并在其中添加覆盖,例如下面的内容。进行更改后,

sudo systemctl restart mysql

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

答案4

相关内容