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 drosseln
[mysqld]
relay_log_space_limit=4G
und 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 gehenexpire_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 mal Relay_Master_Log_File
. Dies stellt das Binärprotokoll auf dem Master dar, dessen letzter Befehl auf dem Slave ausgeführt wurde.
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.4.92.250
Master_User: replicant
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.009677
Read_Master_Log_Pos: 855227755
Relay_Log_File: relay-bin.000674
Relay_Log_Pos: 757296783
Relay_Master_Log_File: mysql-bin.009590
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 757296646
Relay_Log_Space: 94274010765
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 80561
1 row in set (0.00 sec)
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:
PURGE BINARY LOGS TO 'mysql-bin.009590';
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
- Für den Master müssen die Binärprotokolle aktiviert sein
- Der Slave erstellt Relaisprotokolle
- Wenn alle SQL-Anweisungen in einem Relay-Protokoll verarbeitet werden, werden sie gelöscht
- Wenn auf einem Slave mehr als ein Relay-Protokoll auf einem DB-Server vorhanden ist, kann dies darauf hinweisen, dass die Replikation ins Hintertreffen gerät, da der E / A-Thread SQL von einem Master schneller erfasst, als der SQL-Thread die Relay-Protokolle verarbeiten kann.
- Durch die Verwendung von relay_log_space_limit wird verhindert, dass sich die Replikation aufbaut und möglicherweise eine Festplatte voll wird. Relay-Protokolle werden basierend auf Regel 3 ausgelagert
- Ein DB-Server kann sowohl Master als auch Slave sein. Dies ist der einzige Umstand, unter dem ein Slave Binärprotokolle aktivieren muss. In diesem Szenario verfügt ein DB-Server sowohl über Binärprotokolle als auch über Relay-Protokolle.
Wenn Sie ein Failover auf einen Slave durchführen und ihn zu einem Master machen möchten
- Service MySQL zu stoppen
- Fügen
log-bin=mysql-bin
Sie auf dem Slave /etc/my.cnf hinzu
- Service MySQL starten
Sie 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 onrelay-log
sollten Sie diese definieren. Hier ist warum:
Aufgrund der Art und Weise, in der MySQL Serveroptionen analysiert, müssen Sie bei Angabe dieser Option einen Wert angeben. Der Standard-Basisname wird nur verwendet, wenn die Option nicht tatsächlich angegeben ist. Wenn Sie die Option --relay-log verwenden, ohne einen Wert anzugeben, kann dies zu unerwartetem Verhalten führen. Dieses Verhalten hängt von den anderen verwendeten Optionen ab, von der Reihenfolge, in der sie angegeben werden, und davon, ob sie in der Befehlszeile oder in einer Optionsdatei angegeben werden. Weitere Informationen darüber, wie MySQL mit Serveroptionen umgeht, finden Sie in Abschnitt 4.2.3, „Angeben von Programmoptionen“.