MySQL-Replikation verstehen: Protokolliert log_bin alles ohne Angabe von Datenbanken?

Bei der Einrichtung von MySQL-Replikation für mehrere Datenbanken kommt es häufig zu Verwirrung hinsichtlich der Konfiguration des binären Logs. Eine häufige Frage ist, ob MySQL jede Änderung, die an einer Datenbank vorgenommen wird, protokolliert, wenn Sie keine bestimmten Datenbanken in der Konfigurationsdatei angeben. In diesem Beitrag werden wir aufschlüsseln, wie das binäre Logging in MySQL funktioniert, insbesondere was die Direktiven binlog-do-db und binlog-ignore-db betrifft.

Das Problem: Wie behandelt MySQL das Logging von Datenbanken?

Was sind binäre Protokolle?

Binäre Protokolle in MySQL werden verwendet, um Änderungen an den Datenbanken aufzuzeichnen. Diese Protokolle sind für die Replikation unerlässlich, da sie den Slaves helfen, aktuelle Kopien der Daten des Masters zu behalten. Zu verstehen, wie festgelegt wird, welche Datenbanken protokolliert werden, ist entscheidend, insbesondere wenn Sie mit mehreren Datenbanken für verschiedene Kunden arbeiten.

Das Konfigurationsdilemma

Bei der Konfiguration Ihrer MySQL-Installation könnten Sie sich fragen:

  • Kann ich es vermeiden, jede Datenbank aufzulisten und nur ein paar ignorieren?
  • Wenn ich bestimmte Datenbanken zum Ignorieren angebe, werden dann alles andere angemessen protokolliert?

Um dieses Szenario zu veranschaulichen, betrachten wir eine typische Konfigurationsdatei my.cnf.

Die Lösung: Effektive Verwendung von binlog-ignore-db

Verwendung von binlog-ignore-db

Sie können spezifische Ignorier-Befehle in Ihrer MySQL-Konfiguration einfügen. Zum Beispiel:

binlog-ignore-db = mysql
binlog-ignore-db = informationsschema

Diese Konfiguration legt nahe, dass beim Ausführen eines Befehls auf den Datenbanken mysql oder informationsschema diese Befehle nicht protokolliert werden. Der entscheidende Teil liegt jedoch darin, wie die Standarddatenbank mit diesen Befehlen interagiert.

Regeln für das binäre Logging

Laut der MySQL-Dokumentation:

  • Wenn die Standarddatenbank mit einer der binlog-ignore-db-Regeln übereinstimmt, wird die Anweisung nicht in das Protokoll geschrieben.
  • Wenn die Standarddatenbank nicht mit den ignorierten Datenbanken übereinstimmt, wird die Abfrage protokolliert.

Das bedeutet, dass solange Sie Befehle auf Datenbanken ausführen, die nicht mit Ihren Ignorier-Regeln übereinstimmen, diese Änderungen in den binären Protokollen aufgezeichnet werden.

Auswirkungen auf die Replikation

Wenn Sie die binlog-do-db-Einträge entfernen, könnte es den Anschein haben, dass alles protokolliert wird, da Sie Änderungen in der binären Protokolldatei sehen werden. Doch allein das Protokollieren von allem garantiert nicht, dass diese Protokolle auf dem Slave-Server repliziert werden.

Mögliche Probleme

  • Wenn keine binlog-do-db-Spezifikationen gemacht werden und die ignorierten Datenbanken nicht übereinstimmen, könnte MySQL alles protokollieren, aber der Slave erhält diese Änderungen möglicherweise nicht.
  • Um Replikationsprobleme zu lösen, müssen Sie möglicherweise die Option replicate-do-db auf dem Slave verwenden, was Ihre Bemühungen um eine vereinfachte Konfiguration beeinträchtigen könnte.

Fazit

Die wichtige Erkenntnis hier ist, dass das Weglassen von binlog-do-db-Einträgen bei der Verwendung von binlog-ignore-db zu einem Szenario führen kann, in dem MySQL alles protokolliert, außer den ignorierten Datenbanken. Es ist jedoch wichtig, sicherzustellen, dass Sie die entsprechenden Konfigurationen auf Ihrem Slave-Server beibehalten, um eine effektive Replikation zu gewährleisten.

Durch das Verständnis dieser Konfigurationsfeinheiten können Sie eine zuverlässige MySQL-Replikation einrichten, ohne unnötige Komplexität in Ihren Konfigurationen zu erleben.

Wenn Sie weitere Fragen zur MySQL-Replikation oder zur Konfiguration haben, zögern Sie nicht, sich zu melden!