Kiedy po aktualizacji parametru expire_logs_days i ponownym uruchomieniu sql stare binlogi zostaną usunięte?

16

MySQL 5.1.x | InnoDB | Windows

Mój katalog danych mysql zaczyna się zapełniać dziennikami bin.

Obecnie mam skonfigurowane następujące ustawienia na moim serwerze Windows MySQL:

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

Planuję zmienić ustawienie expire_logs_days na expire_logs_days=10i odbić usługę mysql. Jak szybko po wprowadzeniu tej zmiany mogę się spodziewać, że stare dzienniki bin zostaną usunięte.

Czy dzieje się tak tylko w ramach zaplanowanego na noc zadania? A może powinno to być natychmiastowe?

Mike B.
źródło

Odpowiedzi:

29

Zostanie obsłużony natychmiast po uruchomieniu mysql.

Nie musisz czekać na ponowne uruchomienie mysql.

Najpierw ustaw expire_logs_daysna 10 w /etc/my.cnf

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

Następnie zaloguj się do mysql i uruchom to

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

Zanotuj datę i godzinę zapytania

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>

Zatem polecenie WYCZYŚĆ DZIENNIKI BINARNE usunie wszystkie dzienniki binlogowe, których znacznik daty / godziny jest wcześniejszy 2012-12-11 00:00:00.

Na koniec uruchom to polecenie

SET GLOBAL expire_logs_days = 10;

Otóż ​​to. Ponowne uruchomienie nie jest wymagane do zainstalowania expire_logs_days .

Jeśli chodzi o parametry replikacji, wymagane jest ponowne uruchomienie tak.

RolandoMySQLDBA
źródło
Genialna odpowiedź. Dziękuję Ci. Doceniam szczegół.
Mike B
Odśwież, poprawiłem literówkę.
RolandoMySQLDBA
1
Należy tylko zauważyć, że expire_logs_days jest teraz przestarzałe w MySQL 8.0 (zgodnie ze szczegółami w linku podanym przez @RolandoMySQLDBA). Zamiast tego użyj binlog_expire_logs_seconds.
John Rix