Zusammenfassung des Wissens zum MySQL-Protokoll

Zusammenfassung des Wissens zum MySQL-Protokoll

Die zum Speichern der Daten in der Datenbank verwendete Datei wird als Datendatei und die Protokolldatei als Protokolldatei bezeichnet. Darüber hinaus wird die Leistung sehr schlecht sein, wenn bei jedem Lese- und Schreibvorgang direkt auf die Festplatte zugegriffen wird. Daher verfügt die Datenbank über einen Cache, der Datencache ist der Datenpuffer und der Protokollcache ist der Protokollpuffer.

SQL-Ausführungsreihenfolge

Wenn wir eine Aktualisierungsanweisung ausführen, z. B. „Update Table Set c=c+1“ mit ID = 2, lautet die Ausführungsreihenfolge wie folgt:

  • Der Executor erhält den Zeilendatensatz mit der ID=2 über die Speicher-Engine. Wenn sich die Datenseite, auf der sich der Zeilendatensatz mit der ID=2 befindet, bereits im Speicher befindet, wird sie direkt zurückgegeben. Andernfalls müssen die Daten von der Festplatte gelesen werden.
  • Der Executor ruft die zurückgegebenen Zeilendaten ab, addiert 1 zum Wert des Felds c, um die neuen Zeilendaten zu erhalten, und ruft dann die Speicher-Engine-Schnittstelle auf, um die Zeilendaten zu schreiben.
  • Die Engine aktualisiert diese Datenzeile im Speicher und zeichnet den Aktualisierungsvorgang im Redo-Protokoll auf. Zu diesem Zeitpunkt befindet sich das Redo-Protokoll im Vorbereitungszustand. Dann teilen Sie dem Ausführenden mit, dass die Ausführung abgeschlossen ist und die Transaktion jederzeit ausgeführt werden kann.
  • Der Executor generiert für diesen Vorgang ein Binärprotokoll und schreibt das Binärprotokoll auf die Festplatte.
  • Der Executor ruft die Commit-Transaktionsschnittstelle der Engine auf, und die Engine ändert das gerade geschriebene Redo-Protokoll in den Commit-Status, und die Aktualisierung ist abgeschlossen.

Ergänzung: Die grundlegende Speicherstruktur von MySQL besteht aus Seiten (Datensätze werden in Seiten gespeichert). Daher sucht MySQL zuerst nach der Seite, auf der sich der Datensatz befindet, lädt die Seite dann in den Speicher und ändert dann den entsprechenden Datensatz.

Bin-Protokoll

Was ist

Binärprotokolle werden als Archivprotokolle oder Binärprotokolle bezeichnet. Sie gehören zur MySQL-Serverebene und werden verwendet, um Änderungen in der Datenbanktabellenstruktur und den Tabellendaten aufzuzeichnen. Einfach ausgedrückt kann man darunter verstehen, dass jede geänderte SQL-Anweisung gespeichert wird, z. B. Einfügen, Löschen, Aktualisieren (natürlich nicht nur SQL, sondern auch Transaktions-ID, Ausführungszeit usw.).

Wann wird es produziert

Wenn eine Transaktion festgeschrieben wird, werden alle SQL-Anweisungen in der Transaktion gleichzeitig in einem bestimmten Format im Binärprotokoll aufgezeichnet.

Was nützt es

Es gibt zwei Hauptfunktionen: Master-Slave-Replikation und Datenwiederherstellung

  • Derzeit haben die meisten Datenbankarchitekturen einen Master und mehrere Slaves. Der Slave-Server greift auf das Binärprotokoll des Master-Servers zu, um die Datenkonsistenz sicherzustellen.
  • Das Bin-Log zeichnet Änderungen an der Datenbank auf und kann zur Wiederherstellung von Daten verwendet werden

Wann wird die Festplatte gelöscht?

Unterscheidung zwischen innodb_flush_log_at_trx_commit und sync_binlog

​ Binärprotokoll hängt vom Parameter sync_binlog ab

  • 0: Nachdem die Transaktion bestätigt wurde, entscheidet das Betriebssystem, wann der Cache auf die Festplatte geleert wird (beste Leistung, schlechteste Sicherheit)
  • 1: Bei jeder Übermittlung einer Transaktion wird fsync aufgerufen, um den Cache auf die Festplatte zu schreiben (beste Sicherheit, schlechteste Leistung)
  • n: Nach dem Festschreiben von n Transaktionen rufen Sie fsync einmal auf, um den Cache auf die Festplatte zu schreiben

Dateiprotokollierungsmodus

Bin-Protokoll verfügt über drei Dateiaufzeichnungsmodi: Zeile, Anweisung und gemischt

  • Zeile (zeilenbasierte Replikation, PBR): zeichnet die Änderung jeder Datenzeile auf

Vorteile: Es kann die Änderungsdetails jeder Datenzeile klar aufzeichnen und die Konsistenz der Master-Slave-Daten vollständig sicherstellen. Nachteile: Bei Batchvorgängen, z. B. beim Ändern der Tabelle, wird eine große Anzahl von Protokollen generiert.

  • Anweisung: zeichnet jede SQL-Anweisung auf, die Daten ändert, was als SQL-Anweisungsreplikation betrachtet werden kann

Vorteile: geringe Menge an Protokolldaten, reduzierte Festplatten-E/A, verbesserte Speicher- und Wiederherstellungsgeschwindigkeit Nachteile: in einigen Fällen kann es zu Master-Slave-Inkonsistenzen kommen, z. B. wenn die SQL-Anweisung Funktionen wie **now()** enthält

  • Gemischt: Eine Mischung der beiden oben genannten Modi. MySQL wählt den Schreibmodus basierend auf der SQL-Anweisung aus. Im Allgemeinen wird der Anweisungsmodus zum Speichern von Binärprotokollen verwendet. Für Vorgänge, die im Anweisungsmodus nicht repliziert werden können, wird der Zeilenmodus zum Speichern von Binärprotokollen verwendet.

Redo-Protokoll

Was ist

Das Redo-Protokoll wird als Redo-Log bezeichnet. Es ist ein Protokoll auf der Ebene der InnoDB-Speicher-Engine. Es zeichnet die Änderungsinformationen der physischen Seite auf und nicht, wie eine bestimmte Zeile oder mehrere Zeilen geändert werden.

Wann wird es produziert

Wenn eine Transaktion gestartet wird, wird das Redo-Log geschrieben. Das Redo-Protokoll wird nicht beim Festschreiben der Transaktion auf die Festplatte geschrieben, sondern während der Ausführung der Transaktion.

Was nützt es

Kann zur Datenwiederherstellung verwendet werden. Das Redo-Protokoll wird nach dem Start der Transaktion auf die Festplatte geschrieben. Da es sich um ein sequentielles IO handelt, ist die Schreibgeschwindigkeit hoch. Wenn der Server plötzlich einen Stromausfall erleidet, verwendet die InnoDB-Engine ein Redo-Log, um die Datenbank auf den Zeitpunkt vor dem Stromausfall zurückzusetzen und so die Datenintegrität sicherzustellen.

Wann wird die Festplatte gelöscht?

InnoDB schreibt das Protokoll zuerst in den Protokollpuffer, leert es dann aus dem Protokollpuffer in den Betriebssystempuffer und ruft schließlich die fsync-Funktion des Dateisystems auf, um das Protokoll auf die Festplatte zu leeren. Der Zeitpunkt des Redo-Log-Schreibens wird durch den Parameter innodb_flush_log_at_trx_commit bestimmt

  • 0: Einmal pro Sekunde den Protokollpuffer in den Betriebssystempuffer schreiben und fsync aufrufen, um ihn auf die Festplatte zu schreiben.
  • 1: Bei jeder Übermittlung einer Transaktion wird der Protokollpuffer in den Betriebssystempuffer geschrieben und fsync wird aufgerufen, um ihn auf die Festplatte zu schreiben.
  • 2: Jedes Mal, wenn eine Transaktion festgeschrieben wird, wird sie nur in den Betriebssystempuffer geschrieben. Anschließend wird einmal pro Sekunde fsync aufgerufen, um das Protokoll auf die Festplatte zu übertragen.

Der allgemeine Wert ist 2, da die Daten auch bei einem MySQL-Absturz nicht verloren gehen. Nur beim Absturz des gesamten Servers geht 1 Sekunde an Daten verloren.

Binärprotokoll vs. Redo-Protokoll

Nach dem Lesen der obigen Einführung habe ich das Gefühl, dass Bin-Log und Redo-Log sehr ähnlich sind. Beide zeichnen Datenänderungen auf und können zur Wiederherstellung verwendet werden. Tatsächlich bestehen zwischen ihnen immer noch deutliche Unterschiede.

  • Das Bin-Protokoll gehört zur MySQL-Serverebene und das Redo-Protokoll zur InnoDB-Speicher-Engine-Ebene.
  • Das Bin-Protokoll ist ein logisches Protokoll, das die ursprüngliche Logik der SQL-Anweisung aufzeichnet; das Redo-Protokoll ist ein physisches Protokoll, das den Inhalt der physischen Seitenaktualisierung aufzeichnet.
  • Das Bin-Protokoll wird in angehängter Form geschrieben. Wenn die Datei das Limit erreicht, wird sie durch die nächste Datei ersetzt und nicht überschrieben. Das Redo-Protokoll wird zyklisch geschrieben. Die Dateigröße ist festgelegt. Wenn die Datei voll ist, wird sie erneut von Anfang an geschrieben und der ursprüngliche Inhalt wird überschrieben.
  • Die Funktion des Binärprotokolls besteht darin, Daten zwischen Master und Slave zu replizieren und wiederherzustellen. Wenn die Datenbank gelöscht wird oder der Slave Daten mit dem Master synchronisiert, kann das Binärprotokoll zur Wiederherstellung der Daten verwendet werden, da es die SQL-Anweisungen aufzeichnet, die die Daten geändert haben. Die Rolle des Redo-Logs besteht in der Persistenz. Wenn der Server abstürzt oder die Stromversorgung unterbrochen wird, gehen Daten verloren und können über das Redo-Log wiederhergestellt werden.
  • Das Binärprotokoll wird nur dann auf die Festplatte geschrieben, wenn die Transaktion festgeschrieben wird, während das Redoprotokoll beim Starten der Transaktion auf die Festplatte geschrieben wird.

Wenn die gesamte Datenbank gelöscht wird, kann sie über das Redo-Log wiederhergestellt werden?

NEIN! Da sich das Redo-Protokoll auf das Speichern der Datenänderungen einer Transaktion konzentriert, haben die Daten im Redo-Protokoll tatsächlich keinen Referenzwert, wenn die Daten im Speicher auf die Festplatte geschrieben werden. Darüber hinaus überschreibt das Redo-Protokoll historische Daten und es ist unmöglich, alle Daten darüber wiederherzustellen.

Undo-Protokoll

Detaillierte Analyse der MySQL-Transaktionsprotokolle

Was ist

Das Undo-Protokoll wird als Rollback-Protokoll bezeichnet und gehört zur InnoDB-Speicher-Engine-Schicht. Es ist ein logisches Protokoll, das jede Datenzeile aufzeichnet. Wenn wir Daten ändern, wird ein Rückgängig-Protokoll generiert. Es kann davon ausgegangen werden, dass beim Einfügen eines Datenelements das Rückgängig-Protokoll ein entsprechendes Löschprotokoll aufzeichnet und umgekehrt.

Wann wird es produziert

Vor dem Start der Transaktion ein Undo-Log für die aktuelle Version generieren

Was nützt es

Hauptfunktion: Bereitstellung von Rollback und Multi-Version Concurrency Control (MVCC)

  • Rollback: Wenn ein Rollback erforderlich ist, wird der entsprechende Inhalt aus dem logischen Datensatz des Undo-Protokolls gelesen, um ein Rollback durchzuführen.
  • MVCC: Die Undo-Log-Datensätze speichern alte Datenversionen. Wenn eine Transaktion Daten lesen muss, folgt sie der Undo-Kette, um Datensätze zu finden, die ihrer Sichtbarkeit entsprechen.

Oben finden Sie den detaillierten Inhalt der Zusammenfassung des Wissens zu MySQL-Protokollen. Weitere Informationen zu MySQL-Protokollen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Analyse und Lösung eines Fehlalarmproblems bei der langsamen MySQL-Protokollüberwachung
  • Die Rolle und Öffnung des MySQL-Protokolls für langsame Abfragen
  • Aktivieren und Konfigurieren des MySQL-Protokolls für langsame Abfragen
  • Detaillierte Erläuterung des Binlog-Protokollanalysetools zur Überwachung von MySQL: Canal
  • Detaillierte Erläuterung des MySQL-Redo-Logs (Redo-Log) und des Rollback-Logs (Undo-Log)
  • Analyse des MySQL-Warnprotokolls zu abgebrochenen Verbindungen
  • Detaillierte Erklärung von MySQL-Transaktionen und MySQL-Protokollen
  • Eine detaillierte Einführung in den Aufbau und die Verwendung des Tools Anemometer zeigt MySQL Slow Logs grafisch an
  • Detaillierte Erklärung, warum die langsame Abfrageprotokollzeit von MySQL 5.7 8 Stunden hinter der Systemzeit liegt
  • So konvertieren Sie MySQL-Bin-Log-Protokolldateien in SQL-Dateien

<<:  React-Internationalisierung react-i18next ausführliche Erklärung

>>:  Implementierungsmethode des Nginx+Tomcat-Lastausgleichsclusters

Artikel empfehlen

Das rel-Attribut des HTML-Link-Tags

Das <link>-Tag definiert die Beziehung zwis...

Beispiel für die horizontale Anordnung von li-Tags in HTML

Die meisten Navigationsleisten sind horizontal an...

jQuery implementiert eine einfache Änderung der Schaltflächenfarbe

Wir möchten in HTML und CSS die Farbe eines Butto...

So finden Sie die my.ini-Konfigurationsdatei in MySQL 5.6 unter Windows

Machen Sie sich eine Notiz, damit Sie später dara...

So entfernen Sie „Enter“, „Senden“ und „Enter != Senden“ aus dem Formular

Um das Problem „Eingeben != Absenden“ zu implement...

Detaillierte Einführung in die Mysql-Datumsabfrage

Abfrage des aktuellen Datums AKTUELLES DATUM AUSW...

Tiefgreifendes Verständnis der Datenreaktionsfähigkeit von Vue

Inhaltsverzeichnis 1. ES-Syntax-Getter und -Sette...