Как скоро после обновления параметра expire_logs_days и перезапуска sql будут удалены старые binlogs?

16

MySQL 5.1.x | InnoDB | Windows

Мой каталог данных mysql начинает заполняться журналами bin.

В настоящее время на моем сервере Windows MySQL настроены следующие параметры:

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=25

Я планирую изменить настройку expire_logs_days expire_logs_days=10и отключить службу mysql. Как скоро после внесения этого изменения можно ожидать, что старые журналы бен выйдут в свет.

Это делается только как часть запланированного на ночь задания? Или это должно быть немедленным?

Майк Б
источник

Ответы:

29

Это будет обработано немедленно при запуске mysql.

Вам не нужно ждать перезапуска MySQL.

Сначала установите expire_logs_daysзначение 10 в /etc/my.cnf

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=10

Затем войдите в MySQL и запустите этот

PURGE BINARY LOGS BEFORE (date(now()) + interval 0 second - interval 10 day);

Запишите дату и время запроса

mysql> select date(now()) + interval 0 second - interval 10 day;
+---------------------------------------------------+
| date(now()) + interval 0 second - interval 10 day |
+---------------------------------------------------+
| 2012-12-11 00:00:00                               |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Таким образом, команда PURGE BINARY LOGS удалит все журналы, чьи отметки даты и времени предшествуют 2012-12-11 00:00:00.

Наконец, запустите эту команду

SET GLOBAL expire_logs_days = 10;

Вот и все. Для установки expire_logs_days перезагрузка не требуется .

Что касается параметров репликации, требуется перезагрузка.

RolandoMySQLDBA
источник
Блестящий ответ. Спасибо. Я ценю детали.
Майк Б
Пожалуйста, обновите, я исправил опечатку.
RolandoMySQLDBA
1
Просто чтобы заметить, что expire_logs_days теперь устарела в MySQL 8.0 (подробности в ссылке, предоставленной @RolandoMySQLDBA). Вместо этого используйте binlog_expire_logs_seconds.
Джон Рикс