Как решить проблему увеличения размера файлов MySQL Binlog?

Как решить проблему увеличения размера файлов MySQL Binlog?

Количество файлов MySQL Binlog увеличивается с каждым днем, а их размер увеличивается в гигабайтах. Как остановить рост размера файлов 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

Binlogs нужны для репликации и некоторых форм резервного копирования. Похоже, вы не делаете ни того, ни другого.

Для изменения настроек я предпочитаю добавлять новый файл, например (где «rj» — мои инициалы):

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

и внесение в него переопределений, таких как ниже. После внесения изменений,

sudo systemctl restart mysql

log_binуправляет созданием бинлогов.

Чтобы они не удалялись, добавьте binlog_expire_logs_seconds = 86400(или какое-нибудь другое число).

Другой параметр контролирует максимальный размер каждого файла binlog; это не повлияет на общее используемое дисковое пространство, за исключением того, что последний файл останется, пока не "истечет". Новый binlog запускается после любой перезагрузки (или перезапуска mysql), поэтому вы можете увидеть много маленьких файлов.

Итак, мой файл rj.cnf может содержать что-то из этого:

# Added by Rick James
[mysqld]
log_bin =                           # turn off
binlog_expire_logs_seconds = 86400  # 1 day
max_binlog_size = 104857600         # 100M

решение4

Вы можете использовать скрипт, доступный на https://github.com/Thibs/monitor_mysql_binary_logging/blob/main/monitor_mysql_binary_logging.sh

для управления размером/количеством ваших двоичных файлов журнала

Связанный контент