Ich habe eine Frage zum Löschen von Binärprotokollen in der Replikationsumgebung:
Wir haben eine Umgebung mit 1 Master und 2 Slaves (mit MySQL 5.5). Manchmal stoßen wir während schwerer Verarbeitungszeiten auf Speicherplatzprobleme, wodurch das bin-Protokollverzeichnis voll wird. Protokolle sind alle 3 Tage abgelaufen. Ich habe mich gefragt, gibt es einen Grund, warum Protokolle für 3 Tage auf allen Boxen aufbewahrt werden sollten - Master und beide Slaves? Wäre es zum Beispiel sinnvoll, Protokolle für 3 Tage auf einem Master, aber für 1 Tag auf Sklaven aufzubewahren? Was ist der beste Weg, dies zu tun?
Vielen Dank!
Antworten:
SLAVE
Wenn Ihre Slaves keine Master sind, benötigen Slaves überhaupt keine binäre Protokollierung. Sie können eine Obergrenze für den von einem Slave akkumulierten Relay-Protokollspeicher festlegen.
relay_log_space_limit
Fügen Sie für jeden Slave /etc/my/.cnf hinzu, um die Relaisprotokolle auf 4G zu drosselnund starten Sie MySQL neu
Wenn Sie dies nicht einstellen können, sollten Sie zumindest eine entsprechende Warnung erhalten
SHOW SLAVE STATUS\G
und den Wert von überprüfenRelay_Log_Space
(Gesamtanzahl der von Relay-Protokollen verbrauchten Bytes) .MEISTER
Was den Meister betrifft, könnten Sie einstellen
expire_logs_days
auf 1 setzen, aber ich habe eine ernste Warnung für Sie ...Wenn die Replikation unterbrochen wird, haben Sie 1 Tag Zeit, um das Problem zu beheben. Andernfalls wird möglicherweise ein binäres Protokoll auf dem Master entfernt und Sie können keinen CHANGE MASTER TO-Befehl ausführen, um die Replikation neu auszurichten. Ich würde gehen
expire_logs_days
3 auf dem Master verlassen.VORSCHLAG # 1
Wenn Sie über Nacht Bulk-Verarbeitung durchführen müssen, sollten Sie die Bulk-Prozesse möglicherweise auf dem Master mit ausführen
SET SQL_LOG_BIN=0;
zu Beginn der Sitzung . Dies wird natürlich nicht auf den Slave repliziert. Sie können die gleiche Massenladung parallel zu beiden Slaves durchführen.VORSCHLAG # 2
Eine andere Möglichkeit, die Akkumulation von Master-Binärprotokollen zu verwalten, ist die folgende.
Laufen Sie
SHOW SLAVE STATUS\G
auf beiden Slaves. Schau malRelay_Master_Log_File
. Dies stellt das Binärprotokoll auf dem Master dar, dessen letzter Befehl auf dem Slave ausgeführt wurde.In diesem Beispiel lautet Relay_Master_Log_File mysql-bin.009590. Alle Binärlogs vor diesem können vom Master entfernt werden. Sie können dies auf dem Master ausführen:
Dadurch werden ältere Protokolle gelöscht, und die Replikation bleibt erhalten.
VORBEHALT
Binäre Protokolle sind Dateien, die (wie eine FIFO-Warteschlange) alle abgeschlossenen SQL-Transaktionen als SQL-Anweisung oder Zeilenänderung seriell kompilieren. Ein Relay-Protokoll ist eine Datei, die binäre Protokolleinträge von einem Remote-Server (auch bekannt als Master) sammelt.
In der MySQL-Replikation
Wenn Sie ein Failover auf einen Slave durchführen und ihn zu einem Master machen möchten
log-bin=mysql-bin
Sie auf dem Slave /etc/my.cnf hinzuSie müssen die Replikation anderer Slaves auf den neu hochgestuften Master einrichten und sicherstellen, dass die Daten auf dem Slave mit dem neu hochgestuften Master übereinstimmen
UPDATE 2012-08-13 17:47 EDT
Entsprechend der Option MySQL Documentation on
relay-log
sollten Sie diese definieren. Hier ist warum:quelle