Empfohlenes kostenloses Lernen: MySQL-Video-Tutorial
Inhaltsverzeichnis
2. Redo-Log4. Interner WorkflowMySQL-Lernspalte
3. Aktivieren Sie Binlog-Protokolle in MySQL5.7 und ein einfaches Beispiel für die Datenwiederherstellung
1. Einführung
MySQL verfügt über zwei wichtige Protokollmodule:
redo log (Redo-Protokoll)und binlog (Archivprotokoll).
Redo-Protokoll ist das Protokoll der InnoDB-Speicher-Engine-Schicht, und Binlog ist das Protokoll, das von der MySQL-Server-Schicht aufgezeichnet wird. Beide sind Protokolle, die bestimmte Vorgänge aufzeichnen, aber die Formate der Datensätze sind unterschiedlich..2. Redo-Log
Redo-Log: Auch bekannt als (Redo-Log)-Datei, die zum Aufzeichnen von Änderungen in Transaktionsvorgängen verwendet wird Die Transaktion wird übermittelt
Im Falle eines Medienfehlers kann die Redo-Log-Datei hilfreich sein. Wenn die Datenbank ausgeschaltet ist, verwendet die InnoDB-Speicher-Engine das Redo-Log, um den Zeitpunkt vor dem Ausschalten wiederherzustellen, um die Integrität der Daten sicherzustellen .
Wenn ein Datensatz aktualisiert werden muss, schreibt die InnoDB-Engine den Datensatz zunächst in das Redo-Protokoll und aktualisiert den Speicher. Zu diesem Zeitpunkt ist die Aktualisierung abgeschlossen.Die InnoDB-Engine aktualisiert diesen Vorgangsdatensatz zum richtigen Zeitpunkt auf der Festplatte. Diese Aktualisierung wird normalerweise abgeschlossen, wenn das System relativ inaktiv ist, um die Aktualisierungseffizienz zu verbessern. Dabei handelt es sich um
WALd. h. Write-Ahead-LoggingDer entscheidende Punkt ist, dass zuerst das Protokoll und dann auf die Festplatte geschrieben wird. Das Redo-Protokoll von InnoDB hat eine feste Größe. Es kann beispielsweise als Satz von 4 Dateien konfiguriert werden und die Größe jeder Datei beträgt 1 GB. Dann können insgesamt 4 GB Vorgänge aufgezeichnet werden. Das Redo-Protokoll beginnt mit dem Schreiben von Anfang an, schreibt bis zum Ende und kehrt dann zum Anfang zurück, um in einer Schleife zu schreiben, wie in der folgenden Abbildung dargestellt.
write posist die Position des aktuellen Datensatzes. Nach dem Schreiben wird an das Ende der Datei Nr. 3 zurückgekehrt.
Prüfpunktist die aktuelle Position, die gelöscht werden soll, und er bewegt sich auch rückwärts und führt eine Schleife durch. Vor dem Löschen des Datensatzes muss der Datensatz in der Datendatei aktualisiert werden. Der ungenutzte Teil zwischen
write pos und check point
kann zum Aufzeichnen neuer Vorgänge verwendet werden.Wenn write pos
denCheck-Point einholt, bedeutet dies, dass der Redo-Log-Datensatz zu diesem Zeitpunkt nicht voll ist. Sie müssen zunächst anhalten und einige Datensätze löschen, um den Check-Point voranzutreiben . Mit dem Redo-Log kann InnoDB sicherstellen, dass zuvor übermittelte Datensätze nicht verloren gehen, auch wenn die Datenbank abnormal startet. Diese Funktion wird als „absturzsicher“ bezeichnet.
Warum Redo-Log verwenden? Wenn wir DML-Vorgänge in der Datenbank ausführen und das ausgeführte SQL direkt auf die Festplatte schreiben, hat der Druck beim Schreiben von Daten auf die Festplatte einen gewissen Einfluss. Wenn wir den Vorgang einfügen, Wenn die Datenmenge auf einer Seite der Blattknoten nicht ausreicht, muss ein Paging-Algorithmus verwendet werden, der weniger effizient ist.
Wenn ich Redo-Log verwende, schreibe ich zuerst unsere DML-Operationen hinein Führen Sie das Protokoll durch eine „Übertragungsstation“ und geben Sie es dann weiter, wenn ich einen freien Kontrollpunkt habe. Schreiben Sie es auf die Festplatte. Die Effizienz ist viel höher. MySQL-Einstellungen Redo Log
Redo-Log ist ein einzigartiges Protokoll der InnoDB-Engine, und die Serverschicht verfügt auch über ein eigenes Protokoll namens
binlog (archiviertes Protokoll). Warum gibt es zwei Protokolle?
Weil es zu Beginn keine InnoDB-Engine in MySQL gab. Die eigene Engine von MySQL ist MyISAM, aber MyISAM verfügt nicht über Absturzsicherungsfunktionen und Binlog-Protokolle können nur zur Archivierung verwendet werden.
InnoDB wurde von einem anderen Unternehmen in Form eines Plug-Ins in MySQL eingeführt. Da es nicht über die Absturzsicherheitsfunktion verfügt, wenn man sich nur auf Binlog verlässt, verwendet InnoDB ein anderes Protokollsystem, nämlich das Redo-Log, um den
Absturz zu erreichen. sichere Fähigkeit.Diese beiden Protokolle weisen die folgenden drei Unterschiede auf.
Redo-Log ist einzigartig für die InnoDB-Engine; binlog wird von der Serverschicht von MySQL implementiert und kann von allen Engines verwendet werden.
Nehmen Sie die Update-Anweisung einer Tabelle als Beispiel, um einen Blick auf den internen Workflow des Executors und der InnoDB-Engine zu werfen:
mysql> update T set c=c+1 where ID=2;Wie in der Abbildung unten gezeigt, der Leuchtkasten zeigt an, dass es sich in InnoDB befindet. Ausgeführt, das dunkle Kästchen zeigt an, dass es im Executor ausgeführt wird:
Der Executor sucht zuerst nach der Engine, um die Zeilen-ID = 2 zu erhalten. Die ID ist der Primärschlüssel, und die Engine verwendet direkt die Baumsuche, um diese Zeile zu finden. Wenn sich die Datenseite, auf der sich die Zeile ID=2 befindet, bereits im Speicher befindet, wird sie direkt an den Executor zurückgegeben. Andernfalls muss sie von der Festplatte in den Speicher gelesen und dann zurückgegeben werden.
zweiphasiges Commit“? Dies kann durch einen Widerspruchsbeweis erklärt werden.
Da Redo-Log und Binlog zwei unabhängige Logiken sind, muss, wenn keine zweistufige Übermittlung erforderlich ist, entweder zuerst das Redo-Log und dann das Binlog geschrieben werden oder die umgekehrte Reihenfolge übernommen werden. Lassen Sie uns am Beispiel der vorherigen Update-Anweisung sehen, welche Probleme bei diesen beiden Methoden auftreten.Angenommen, der Wert von Feld c in der aktuellen Zeile mit ID = 2 ist 0, und es wird außerdem angenommen, dass während der Ausführung der Aktualisierungsanweisung nach dem Schreiben des ersten Protokolls ein Absturz auftritt, bevor das zweite Protokoll geschrieben wird wird passieren? Wolltuch? 1.
Schreiben Sie zuerst das Redo-Protokoll und dann das Binlog.
Angenommen, der MySQL-Prozess startet abnormal neu, wenn das Redo-Log geschrieben wird, aber bevor das Binlog geschrieben wird. Nachdem das Redo-Protokoll geschrieben wurde, können die Daten auch bei einem Systemabsturz wiederhergestellt werden. Daher beträgt der Wert von c in dieser Zeile nach der Wiederherstellung 1. Aber da das Binlog vor seiner Fertigstellung abstürzte, wurde diese Aussage zu diesem Zeitpunkt nicht im Binlog aufgezeichnet. Wenn das Protokoll später gesichert wird, wird diese Anweisung daher nicht in das gespeicherte Binlog aufgenommen.Dann werden Sie feststellen, dass, wenn Sie dieses Binlog zum Wiederherstellen der temporären Bibliothek verwenden müssen, die temporäre Bibliothek dieses Mal nicht aktualisiert wird, da das Binlog dieser Anweisung verloren geht. Der Wert von c in der wiederhergestellten Zeile ist 0 ist derselbe wie der der Originalbibliothek. Die Werte sind unterschiedlich.
2.Schreiben Sie zuerst das Binlog und dann das Redo-Log. Wenn es nach dem Schreiben des Binlogs zu einem Absturz kommt, ist die Transaktion nach der Wiederherstellung nach dem Absturz ungültig, da das Redo-Log noch nicht geschrieben wurde, sodass der Wert von c in dieser Zeile 0 ist.
Aber das Protokoll „Change c from 0 to 1“ wurde im Binlog aufgezeichnet. Wenn daher später Binlog zum Wiederherstellen verwendet wird, wird eine weitere Transaktion ausgegeben. Der Wert von c in der wiederhergestellten Zeile ist 1, was sich vom Wert in der ursprünglichen Datenbank unterscheidet.
Sie können sehen, dass, wenn „Zwei-Phasen-Commit“ nicht verwendet wird, der Status der Datenbank möglicherweise nicht mit dem Status der mithilfe ihres Protokolls wiederhergestellten Bibliothek übereinstimmt.
Verwandte kostenlose Lernempfehlungen: MySQL-Datenbank(Video)
Das obige ist der detaillierte Inhalt vonProtokollierung MySQL-Protokollierungsmodul. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!