Wann werden alte Binlogs nach dem Aktualisieren von expire_logs_days param und dem Neustart von sql gelöscht?

16

MySQL 5.1.x | InnoDB | Windows

Mein MySQL-Datenverzeichnis beginnt sich mit Bin-Protokollen zu füllen.

Ich habe derzeit die folgenden Einstellungen in meinem Windows MySQL-Server konfiguriert:

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

Ich plane, die expire_logs_days-Einstellung zu ändern und den mysql- expire_logs_days=10Dienst zu bouncen . Wie bald nach dieser Änderung kann ich damit rechnen, dass die alten Papierkorbprotokolle gelöscht werden.

Wird dies nur im Rahmen einer geplanten Nachtaufgabe durchgeführt? Oder sollte das sofort sein?

Mike B
quelle

Antworten:

29

Es wird sofort beim Start von MySQL behandelt.

Sie müssen nicht auf einen Neustart von MySQL warten.

Zuerst Satz expire_logs_days10 in /etc/my.cnf zu sein

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

Melden Sie sich als Nächstes bei mysql an und führen Sie dies aus

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

Notieren Sie das Datum und die Uhrzeit der Abfrage

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>

Somit ist die PURGE Binärlogs wird Befehl alle binlogs löschen , deren Datetime Stempel datiert 2012-12-11 00:00:00.

Führen Sie abschließend diesen Befehl aus

SET GLOBAL expire_logs_days = 10;

Das ist es. Für die Installation von expire_logs_days ist kein Neustart erforderlich .

Für die Replikationsparameter ist ein Neustart erforderlich.

RolandoMySQLDBA
quelle
Geniale Antwort. Vielen Dank. Ich schätze das Detail.
Mike B
Bitte aktualisieren, ich habe einen Tippfehler korrigiert.
RolandoMySQLDBA
1
Zu beachten ist, dass expire_logs_days jetzt in MySQL 8.0 veraltet ist (siehe den Link in @RolandoMySQLDBA). Verwenden Sie stattdessen binlog_expire_logs_seconds.
John Rix