Ausführliche Erklärung des Binlogs in MySQL 8.0

Ausführliche Erklärung des Binlogs in MySQL 8.0

1 Einleitung

Das Binärprotokoll zeichnet SQL-Anweisungen auf, die Daten enthalten oder ändern können, und speichert sie in binärer Form auf der Festplatte.

2. Die Rolle von Binlog

Hauptfunktionen: Replikation, Wiederherstellung und Auditing.

3 Binlog aktivieren

3.1 Überprüfen Sie, ob das aktuelle MySQL Binlog unterstützt

Das folgende OFF bedeutet nicht unterstützt

3.2 Ändern Sie die Datei my.cnf, um Binlog zu unterstützen

my.cnf-Pfad anzeigen

mysql --help --verbose | grep my.cnf

Erstellen Sie eine neue Datei my.cnf in /etc und fügen Sie den folgenden Inhalt hinzu. Hinweis: Fügen Sie die mysqld-Gruppe hinzu

Starten Sie MySQL neu

Überprüfen Sie erneut, ob Binlog unterstützt wird

3 Binlog-Verwaltungsbefehle

Master-Protokolle anzeigen

Zeigen Sie die Liste aller Binlog-Protokolle an.

Masterstatus anzeigen. Zeigen Sie den Binlog-Status an. Zeigen Sie den Nummernnamen des letzten Binlog-Protokolls und die Position (pos) an, an der das letzte Ereignis endet

Protokolle leeren

Aktualisieren Sie die Binlog-Protokolldatei. Nach der Aktualisierung wird eine neue Binlog-Protokolldatei erstellt.

Master zurücksetzen

Alle Binlog-Protokolldateien löschen

Binlog-Protokolldateien anzeigen

mysqlbinlog mysql-bin.000002

4 Binlog-bezogene Variablen

log_bin

Binlog-Schalter.

Variablen wie „log_bin“ anzeigen;

Zeigen Sie die Variable an:

Variablen wie „log_bin“ anzeigen; 

binlog_format

Binlog-Protokollformat.

Variablen anzeigen:

Variablen wie „binlog_format“ anzeigen; 

5 Binlog-Protokollformat

REIHE

Es werden nur die geänderten Datensatzdetails gespeichert, die kontextbezogenen Informationen zur SQL-Anweisung werden nicht aufgezeichnet.

Vorteil

Das Binärprotokoll muss die kontextbezogenen Informationen der ausgeführten SQL-Anweisung nicht aufzeichnen. Es muss nur aufzeichnen, wie der Datensatz geändert wurde. Daher zeichnet der Protokollinhalt auf Zeilenebene die Details jeder Datenänderungszeile klar auf. Und es wird kein Problem geben, dass die gespeicherte Prozedur, Funktion oder der Triggeraufruf und der Trigger in bestimmten Situationen nicht korrekt kopiert werden können

Mangel

Wenn alle ausgeführten Anweisungen im Protokoll aufgezeichnet werden, werden sie als Änderungen an jeder Datensatzzeile aufgezeichnet. Dies kann eine große Menge an Protokollinhalten erzeugen. Wenn beispielsweise eine Aktualisierungsanweisung mehrere Datensätze ändert, wird jede Änderung im Binärprotokoll aufgezeichnet, was zu einer großen Menge an Binärprotokollen führt. Insbesondere beim Ausführen von Anweisungen wie „Alter Table“ wird jeder Datensatz aufgrund der Änderung der Tabellenstruktur geändert, sodass jeder Datensatz der Tabelle im Protokoll aufgezeichnet wird.

STELLUNGNAHME

Jede SQL-Anweisung, die Daten ändert, wird im Binlog aufgezeichnet.

Vorteil

Es ist nicht erforderlich, jede Zeilenänderung aufzuzeichnen. Dadurch wird die Menge der Binlog-Protokolle reduziert, E/A gespart und die Leistung verbessert. Wie viel Leistung und Protokollvolumen im Vergleich zu Zeilen eingespart werden kann, hängt von der SQL-Situation der Anwendung ab. Normalerweise ist die Menge an Protokoll, die durch Ändern oder Einfügen desselben Datensatzes im Zeilenformat generiert wird, geringer als die Menge an Protokoll, die durch eine Anweisung generiert wird. Wenn jedoch Aktualisierungsvorgänge mit Bedingungen, das Löschen der gesamten Tabelle, das Ändern der Tabelle und andere Vorgänge berücksichtigt werden, generiert das ROW-Format eine große Menge an Protokollen. Wenn Sie also überlegen, ob Sie Protokolle im ROW-Format verwenden möchten, sollten Sie die tatsächliche Situation der Anwendung berücksichtigen, wie stark die Menge der generierten Protokolle ansteigt und welche IO-Leistungsprobleme damit einhergehen.

Mangel

Da nur die ausgeführten Anweisungen aufgezeichnet werden, müssen, damit diese Anweisungen auf dem Slave ordnungsgemäß ausgeführt werden können, auch einige relevante Informationen zu jeder Anweisung während der Ausführung aufgezeichnet werden, um sicherzustellen, dass alle Anweisungen auf dem Slave dieselben Ergebnisse erzielen wie bei der Ausführung auf dem Master. Darüber hinaus kann es bei der MySQL-Replikation, beispielsweise bei einigen spezifischen Funktionen, dazu kommen, dass der Slave mit dem Master übereinstimmt, was zu vielen damit verbundenen Problemen führt (beispielsweise bei der sleep()-Funktion, last_insert_id() und benutzerdefinierten Funktionen (udf)).

GEMISCHT

Eine Kombination der beiden oben genannten Ebenen. Allgemeine Anweisungsänderungen verwenden das Anweisungsformat, um Binärprotokolle zu speichern. Beispielsweise können einige Funktionen und Anweisungen den Master-Slave-Replikationsvorgang nicht abschließen, sodass das Zeilenformat zum Speichern von Binärprotokollen verwendet wird. MySQL unterscheidet das aufzuzeichnende Protokollformat je nach ausgeführter SQL-Anweisung, d. h. es wird zwischen Anweisung und Zeile gewählt. Der Zeilenebenenmodus der neuen Version von MySQL wurde ebenfalls optimiert. Nicht alle Änderungen werden auf Zeilenebene aufgezeichnet. Wenn sich beispielsweise die Tabellenstruktur ändert, wird dies im Anweisungsmodus aufgezeichnet. Bei Anweisungen, die Daten ändern, wie etwa Aktualisieren oder Löschen, werden Änderungen an allen Zeilen weiterhin aufgezeichnet.

Auswahl des Binlog-Protokollformats

Mysql verwendet standardmäßig das Statement-Log-Format und MIXED wird empfohlen.

Aufgrund einiger spezieller Verwendungszwecke können Sie die Verwendung von ROWED in Betracht ziehen, z. B. das Synchronisieren von Datenänderungen über Binlog-Protokolle, wodurch viele damit verbundene Vorgänge eingespart werden. Die Verarbeitung von Binlog-Daten wird sehr einfach, und im Vergleich zu gemischten Daten ist auch das Parsen sehr einfach (vorausgesetzt natürlich, dass der durch das erhöhte Protokollvolumen verursachte IO-Overhead im tolerierbaren Bereich liegt).

Auswahl des MySQL-Binlog-Formats

MySQL-Auswahlprinzip für das Protokollformat: Wenn Sie INSERT, UPDATE, DELETE und andere direkte Tabellenoperationen verwenden, wird das Protokollformat gemäß der Einstellung von binlog_format aufgezeichnet. Wenn Sie Verwaltungsanweisungen wie GRANT, REVOKE, SET PASSWORD verwenden, wird ohnehin der SBR-Modus zum Aufzeichnen verwendet.

6 Binlog-bezogenes SQL anzeigen

Binlog-Ereignisse anzeigen [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

Sehen Sie sich das erste Binlog-Protokoll an

Binlog-Ereignisse anzeigen; 

Zeigen Sie das angegebene Binlog-Protokoll an

Binlog-Ereignisse in „mysql-bin.000001“ anzeigen; 

Beginnen Sie am angegebenen Ort und zeigen Sie das angegebene Binlog-Protokoll an.

Binlog-Ereignisse in „mysql-bin.000001“ ab 666 anzeigen;

Beginnen Sie am angegebenen Ort, zeigen Sie das angegebene Binlog-Protokoll an und begrenzen Sie die Anzahl der Abfragen

Binlog-Ereignisse in „mysql-bin.000001“ ab 666, Limit 2 anzeigen;

Beginnen Sie an der angegebenen Position mit einem Offset, zeigen Sie das angegebene Binlog-Protokoll an und begrenzen Sie die Anzahl der abzufragenden Einträge

Binlog-Ereignisse in „mysql-bin.000001“ ab 666 Limit 1, 2 anzeigen;

7 Binlog-Spaltenbeschreibung

Ereignistyp

  • QUERY_EVENT: Nicht mit Daten zusammenhängende Operationen wie „Beginn“, „Tabelle löschen“, „Tabelle abschneiden“ usw.
  • TABLE MAP EVENT zeichnet die Tabelleninformationen auf, die der nächsten Operation entsprechen, und speichert den Datenbanknamen und den Tabellennamen
  • XID_EVENT markiert das Transaktions-Commit
  • WRITE ROWS EVENT fügt Daten ein, d.h. Einfügevorgang
  • UPDATE ROWS EVENT aktualisiert Daten, d.h. Update-Operation
  • DELETE ROWS EVENT löscht Daten, d.h. Löschvorgang

siehe

https://www.jb51.net/article/197048.htm

Zusammenfassen

Dies ist das Ende dieses Artikels mit der ausführlichen Erklärung des Binlogs in MySQL 8.0. Weitere relevante Erklärungen zum Binlog von MySQL 8.0 finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • MySQL-Reihe: Redo-Log, Undo-Log und Binlog – ausführliche Erklärung
  • Spezifische Verwendung des MySQL-Parameters binlog_ignore_db
  • So wählen Sie das Format bei der Verwendung von Binlog in MySQL
  • Detaillierte Erläuterung des Binlog-Protokollanalysetools zur Überwachung von MySQL: Canal
  • Zusammenfassung einiger Gedanken zur Binlog-Optimierung in MySQL
  • Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs
  • Schritte zum Aktivieren des MySQL-Datenbanküberwachungs-Binlogs
  • So unterscheiden Sie MySQLs innodb_flush_log_at_trx_commit und sync_binlog

<<:  Codebeispiel für die Linux-SSH-Serverkonfiguration

>>:  Lösung für die verstümmelte Anzeige von Linux SecureCRT

Artikel empfehlen

JS-Interviewfrage: Kann forEach aus der Schleife aussteigen?

Als mir diese Frage gestellt wurde, war ich unwis...

MySQL 5.7.21 Installations- und Konfigurations-Tutorial

Die einfache Installationskonfiguration von mysql...

Eine gängige Technik zur Implementierung von Dreiecken mit CSS (mehrere Methoden)

In manchen Vorstellungsgesprächen werden häufig F...

Detaillierte Erklärung der Funktion und Verwendung der KeepAlive-Komponente in Vue

Vorwort Während des Vorstellungsgesprächs erwähne...

js canvas realisiert kreisförmige Wasseranimation

In diesem Artikelbeispiel wird der spezifische Co...

So bedienen Sie das Kontrollkästchen auf einer HTML-Seite

Kontrollkästchen sind auf Webseiten sehr verbreit...

So konfigurieren Sie gängige Software unter Linux

Wenn Sie einen neuen Linux-Server bekommen, müsse...

Probleme mit Index und FROM_UNIXTIME in MySQL

Null, Hintergrund Ich habe diesen Donnerstag viel...

Beispiele für die Implementierung und Verwendung von geplanten MySQL-Aufgaben

Dieser Artikel veranschaulicht anhand von Beispie...

MySQL-Unterabfrage und Details zur Verknüpfungstabelle

Inhaltsverzeichnis 1. Was ist eine Unterabfrage? ...