Löschen von Bin-Protokollen in der Replikationsumgebung

13

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!

anna
quelle
Willkommen in der DBA.SE. Diese Frage verdient eine +1, da das Wachstum von Binär- und Relay-Protokollen häufig als selbstverständlich angesehen wird und die Ursache für viele Probleme sein kann, wenn sie nicht aktiviert wird.
RolandoMySQLDBA

Antworten:

12

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_limitFü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\Gund 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\Gauf 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

  1. Für den Master müssen die Binärprotokolle aktiviert sein
  2. Der Slave erstellt Relaisprotokolle
  3. Wenn alle SQL-Anweisungen in einem Relay-Protokoll verarbeitet werden, werden sie gelöscht
  4. 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.
  5. 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
  6. 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-binSie 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“.

RolandoMySQLDBA
quelle
Kommentare sind nicht für längere Diskussionen gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Paul White setzt Monica wieder ein