Die PURGE BINARY LOGS
Anweisung löscht alle in der Protokollindexdatei aufgelisteten binären Protokolldateien vor dem angegebenen Protokolldateinamen oder Zeitstempel. Gelöschte Protokolldateien werden ebenfalls aus der in der Indexdatei aufgezeichneten Liste entfernt, sodass die angegebene Protokolldatei die erste in der Liste wird.
Ich hoffe, Sie haben Binärprotokolle bis zur mysql-bin.000019
Verwendung des Befehls gelöscht
PURGE BINARY LOGS TO 'mysql-bin.000019';
Wenn Sie alle Protokolle löschen müssen, mögen Sie
PURGE BINARY LOGS TO 'mysql-bin.000025';
Dadurch werden binäre Protokolle bis entfernt mysql-bin.000025
.
AKTUALISIEREN
Du kannst es versuchen
RESET MASTER;
RESET MASTER
Löscht alle in der Indexdatei aufgelisteten binären Protokolldateien, setzt die leere binäre Protokollindexdatei auf leer zurück und erstellt eine neue binäre Protokolldatei
Die Auswirkungen von RESET MASTER
unterscheiden sich von denen von PURGE BINARY LOGS in zwei wesentlichen Punkten:
RESET MASTER
Entfernt alle in der Indexdatei aufgelisteten binären Protokolldateien, wobei nur eine einzige leere binäre Protokolldatei mit dem numerischen Suffix .000001 übrig bleibt, während die Nummerierung durch PURGE BINARY LOGS nicht zurückgesetzt wird.
RESET MASTER
sollte nicht verwendet werden, während Replikations-Slaves ausgeführt werden. Das Verhalten RESET MASTER
bei Verwendung während der Ausführung von Slaves ist undefiniert (und wird daher nicht unterstützt), wohingegen PURGE BINARY LOGS
es sicher verwendet werden kann, während Replikations-Slaves ausgeführt werden.
CAVEAT von RolandoMySQLDBA
Wenn Sie RESET MASTER
mit verbundenen und laufenden Slaves arbeiten, verliert der E / A-Thread jedes Slaves sofort seinen Platz. Die Replikation ist daher fehlerhaft und Sie müssen Zeit damit verbringen, die Daten aller Slaves erneut zu synchronisieren. Wenn Sie Binärprotokolle sicher von einem Master löschen möchten, ohne die Replikationsintegrität zu beeinträchtigen, gehen Sie wie folgt vor:
- Laufen Sie
SHOW SLAVE STATUS\G
auf jedem Slave.
- Beachten Sie
Relay_Master_Log_File
. Dies ist das Binärprotokoll, dessen letzte Anweisung im Slave erfolgreich ausgeführt wurde.
SHOW SLAVE STATUS\G
Bestimmen Sie anhand aller Anzeigen von , welche Relay_Master_Log_File
die älteste ist (z. B. 'mysql-bin.00123').
- Sie können ausführen
PURGE BINARY LOGS TO 'mysql-bin.00123';
Keiner der Slaves verliert seinen Platz.
Der Gesamteffekt? Dadurch bleiben auf dem Master Binärprotokolle zurück, deren Anweisungen noch nicht auf allen Slaves ausgeführt wurden.
CHANGE MASTER TO
, werden alle Relay-Protokolle gelöscht. WennRelay_Master_Log_file
jamysql-bin.00123
, ist dies das älteste binäre Protokoll auf dem Master, das dem Slave bekannt ist. Wennmysql-bin.00123
auf dem Master nicht mehr vorhanden ist, können Sie den richtigen Ort für die Replikation verlieren, wenn Sie einenCHANGE MASTER TO
auf dem Slave ausführen , der nicht auf neuere Protokolle verweist. Dies kann leicht übersehen werden und Sie brechen die Replikation manuell ab.Ich bin nicht sicher, ob Ihnen dies passiert ist, aber in meinem Fall hat MySQL das "Zyklisieren" von Protokollen gestoppt und die Datei mysql-bin.index wurde mit ungültigen Binlog-Dateieinträgen "beschädigt".
Insbesondere hatte die Indexdatei bei mysql-bin.000001 begonnen und war bei mysql-bin.000220 angekommen, hatte dann aber irgendwie wieder von 001 gestartet. Als ich dies mit den Dateien auf meinem Server verglich, konnte ich sehen, dass ich Dateien von 001 bis hatte 022.
Zuerst habe ich es versucht,
PURGE LOGS TO 'mysql-bin.000022';
aber das hat nicht funktioniert.Am Ende habe ich MySQL gestoppt und die Indexdatei manuell bearbeitet, bis sie mit den Dateien auf meinem Server übereinstimmt. Beim Neustart von MySQL wurden die Binlog-Dateien bereinigt, um die Einstellung zu berücksichtigen
expire_logs_days
, und es wurde wieder normal funktioniert.quelle
PURGE LOGS
funktioniert nur unter dem idealen Setup: 1) wenn alle Binärprotokolle aufeinanderfolgend sind, 2) alle Binärprotokolle in dermysql-bin.index
Datei benannt sind, 3) Es gibt keine zusätzlichen Protokolle, die nicht in erwähnt werdenmysql-bin.index
. +1 !!!In meinem Fall wurde
PURGE BINARY
einfach nichts gelöscht.Ich hatte meine Partition zu 100% ausgelastet (ich musste mein Slowqueries-Protokoll ein wenig bereinigen, damit MySQL genügend Speicherplatz hatte, um neu gestartet zu werden), also änderte ich als erstes
/etc/my.cnf
die Zeile, umlog-bin=mysql-bin
sie zu kommentieren (sie wurde nicht benötigt) auf diesem Server mehr und ich hatte vergessen, es zu entfernen), und dann startete ich mysql neu (dies wurde benötigt, weil es Abfragen in der Warteschlange gab, diePURGE BINARY
die Ausführung verhinderten).Danach rannte ich,
PURGE BINARY
aber nichts passierte. Also las ich das Handbuch und fand heraus, dass:Also habe ich
log-bin=mysql-bin
meine/etc/my.cnf
wieder aktiviert, neu gestartet, die Dateien gelöscht (jetzt mit Erfolg), die Zeile erneut kommentiert und dann neu gestartet. Danach wurden die Dateien entfernt und nicht mehr erstellt.quelle
Das funktioniert bei mir: (MySQL Server Version: 5.6.14)
Entfernt alle Binärprotokolle auf meinem System.
quelle
Sie können ALLE Protokolle einfach löschen mit:
Oder ersetzen Sie func NOW () durch ein beliebiges Datum in Anführungszeichen:
Oder Sie können diese Aktion mit
expire_logs_days = 10
in my.cnf automatisieren . Standardmäßig expire_logs_days ist 0 = nie Protokolle löschen.( Quelle )
quelle