Heim  >  Artikel  >  Datenbank  >  Ausführliche Erläuterung der Probleme im Zusammenhang mit dem MySQL-Binärprotokoll

Ausführliche Erläuterung der Probleme im Zusammenhang mit dem MySQL-Binärprotokoll

巴扎黑
巴扎黑Original
2017-07-17 09:50:591661Durchsuche

Quelle dieses Artikels:
(Die Beibehaltung der Quelle stellt keinen Anspruch auf Originalarbeit dar. Meine bescheidene Arbeit ist weit davon entfernt. Es dient nur dazu, auf den Originaltext zu verlinken, da einige Fehler vorliegen Das kann später korrigiert werden Wenn der Testserver sein Testskript zum Schreiben von Daten ausführt, lautet die Fehlermeldung wie folgt:

Transaktion mit mehreren Anweisungen erfordert mehr als „max_binlog_cache_size“ Bytes an Speicher, erhöhen Sie diese MySQLd-Variable und versuchen Sie es erneut


Es wird angezeigt, dass max_binlog_cache_size nicht ausreicht, da das Binärprotokoll aktiviert ist. Diesmal ist kein großer Transaktionsvorgang aufgetreten Der Vorgang wurde zu Beginn festgestellt und schlug fehl.

Nachdem die Größe von binlog_cache_size geändert wurde, wurde das Problem gelöst.


Da die Standard-Innodb-Engine verwendet wird, ist das Binärprotokoll aktiviert.

Für Transaktionsvorgänge muss das Binärprotokoll geschrieben werden, wenn die Transaktion abgeschlossen ist , Die durchgeführten Schreibvorgänge werden zwischengespeichert, bis die gesamte Transaktion abgeschlossen ist, und der mysqld-Prozess schreibt die gesamte Transaktion in das Binärprotokoll.

Wenn ein Ding gestartet wird, wird der Inhaltsspeicherplatz entsprechend dem durch die Systemvariable binlog_cache_size angegebenen Wert zugewiesen. Wenn der angegebene Cachespeicherplatz binlog_cache_size nicht ausreicht, wird der ausgeführte Transaktionsvorgang zurückgesetzt und eine Fehlermeldung angezeigt .



Übrigens fassen wir das Binärprotokoll und die zugehörigen Parameterinformationen zusammen

Was ist ein Binärprotokoll?

Wird zum Aufzeichnen von Schreibvorgängen (Hinzufügungen, Löschungen, Änderungen, aber ausgenommen Abfragen) in der MySQL-Datenbank verwendet, was der Transaktionsprotokolldatei im vollständigen Wiederherstellungsmodus in SQL Server entspricht.

Welche Rolle spielt das Binärprotokoll?

1. Wird für die Replikation verwendet. Wenn die Master-Slave-Replikation konfiguriert ist, sendet der Master-Server das von ihm generierte Binärprotokoll an die Slave-Seite. Die Slave-Seite verwendet die Informationen in diesem Binärprotokoll, um es lokal zu wiederholen, um den Master zu erreichen -Slave-Synchronisation
2. Benutzerwiederherstellung: MySQL kann Binärprotokolle verwenden, um Wiederherstellungsvorgänge basierend auf Zeitpunkten oder Transaktions-IDs basierend auf Vollsicherung und Differenzsicherung durchzuführen. Das Prinzip ähnelt dem Log-Redo der Master-Slave-Replikation.


Zugehörige Parameterinformationen des Binärprotokolls

1, Binärprotokoll aktivieren

Um das Binärprotokoll zu aktivieren, müssen Sie einen Pfad zum Log-Bin-Parameter angeben. Beispiel: log_bin=/var/lib/mysql/mysql-bin

Nach dem Starten des Binärprotokolls wird automatisch eine log_bin_index-Datei generiert, die das Binärprotokoll verwaltet. Die Option log_bin wird auch als „on“ angezeigt, was bedeutet, dass das Binärprotokoll aktiviert ist.


 

2. Das Format der Binärprotokolldatei

Das Format des Binärprotokolls wird durch den Parameter binlog_format gesteuert Das Binärprotokoll verfügt über drei Modi: Anweisung (Anweisung), zeilenbasiert (Zeile) und gemischter Modus (gemischt), der die ersten beiden kombiniert.

Die anweisungsbasierte Binärfunktion weist (meiner Meinung nach) einige Mängel auf, z Als aktuelle Verwendung derselben Update-Anweisung erhält der Now-Update-Vorgang auch die aktuelle Zeit auf dem Master-Server und dem Slave-Server. Die durch die Master-Slave-Replikation erzielten Ergebnisse sind unterschiedlich.

Der zeilenbasierte Binärprotokollmodus behebt einige der Mängel des anweisungsbasierten Modus, in einigen Fällen wird jedoch eine große Anzahl von Protokollen generiert. Beispielsweise aktualisiert ein Aktualisierungsvorgang 1 Million Datenzeilen Zeilenbasiertes Binärprotokoll, das Ergebnis ist 1 Million Protokolle

Basierend auf dem Hybridmodus, der die Vorteile der beiden oben genannten Methoden kombiniert.

Kann in der Konfigurationsdatei eingestellt werden: binlog_format = MIXED



3, binäre Protokollaufzeichnungszeitpunkt

Binäre Protokollaufzeichnung Es kann synchron sein, das heißt, die Transaktion wird nach der Übermittlung in das Binärprotokoll geschrieben, oder es kann asynchron sein, wobei der Festplatten-Cache des Betriebssystems bestimmt, wann auf die Festplatte geschrieben wird.

Es wird durch den Parameter sync_binlog= n gesteuert. Wenn sync_binlog = 1 festgelegt ist, bedeutet dies die höchste Sicherheitsstufe des Schreibens (es gibt jedoch keine Garantie dafür, dass keine Transaktionsprotokolle verloren gehen). Modus, aber es hat einen gewissen Einfluss auf die Leistung.

Persönlich denke ich, dass es keinen Grund gibt, sync_binlog nicht auf 1 zu setzen, wenn es sich um eine Transaktions-Engine handelt.

Es heißt, dass durch das Setzen von sync_binlog auf 1 möglicherweise auch ein Transaktionsprotokoll verloren geht, aber ich habe nicht herausgefunden, warum es verloren geht, denn da es sich um eine Transaktions-Engine handelt, gibt es auch eine Ebene von Undo- oder Redo-Protokollen um es zu sichern?

Denken Sie später darüber nach. Aufgrund der Existenz von Redo- und Undo-Protokollen kann die Konsistenz der Dinge auf dem Master-Server gewährleistet werden. Es sollte sein, dass während der Master-Slave-Replikation etwas verloren gehen kann nicht an den Slave-Server übermittelt werden.

 

4, die Größe einer einzelnen Datei des Binärprotokolls

Die Größe des Binärprotokolls ist die maximale Grenze von Eine einzelne Protokolldatei, unter normalen Umständen wird die festgelegte maximale Dateigröße nicht überschritten. Nach Überschreiten der festgelegten Höchstgrenze erfolgt ein Protokollwechsel, d. h. es wird eine binäre Protokolldatei neu generiert.
max_binlog_size = 100M
Die hier gezeigte Einheit von 104857600 ist Bytes, d , Bereinigung des Binärprotokolls

Nachdem das Binärprotokoll gerollt wurde, wird eine neue Datei zum Speichern des Protokolls generiert. Die Protokolldatei wird nach Ablauf automatisch gelöscht, andernfalls wird ein stetiger Strom von Protokolldateien generiert Sie können beispielsweise die Ablaufzeit auf 2 setzen. Der konfigurierbare Wert ist: Expire_logs_days = 2. Binärprotokolle, die älter als zwei Tage sind, werden automatisch gelöscht.

Sie können die aktuelle Anzahl der binären Protokolldateien mit dem Befehl „Show Master Logs“ anzeigen

 



6, Scrollen der binären Protokolldateien

1) Unter normalen Umständen wird der Datensatz automatisch gescrollt, nachdem er voll ist, und der Suffixname lautet +1 2) Nach dem Neustart des MySQL-Dienstes wird automatisch gescrollt, unabhängig davon, ob die Protokolldatei vorhanden ist ist entsprechend der angegebenen maximalen Kapazität voll

3) Manuelles Scrollen, Führen Sie den Befehl „flush logs“ wie folgt aus, eine binäre Protokolldatei wird neu generiert

 

4) Löschen Sie das Binärprotokoll manuell

Sie können den Befehl

purge Binary Logs to FileName verwenden, um die Datei vor dem angegebenen Dateinamen

 

Sie können es mit dem Befehl „Binärprotokolle löschen“ vor „2017-03-10 10:10:00“ löschen. Dateien vor der angegebenen Zeit

 

Löschen Sie die angegebenen Binärprotokolle löschen Protokolle vor date_sub( now( ), Intervall 7 Tage); Xiaoxiang Master löscht Master-Protokolle vor date_sub( now( ), Intervall 7 Tage), sollte es eine Auswirkung haben (binäre und Master-Schlüsselwörter)?

7. Datenbanken für Binärprotokolle binden (oder ausschließen)

Sie können festlegen, dass einige Datenbanken Binärprotokolle aktivieren, oder dass einige Datenbanken Binärprotokolle nicht aktivieren

# binlog_do_db: Wird beim Festlegen von Master-Slave verwendet;
# binlog-ignore-db: Legen Sie fest, welche Datenbank keine Protokolle aufzeichnet.

Wird in MySQL5.7.18 festgelegt (konfiguriert in my.cnf), aber beim Abfragen scheint es so nutzlos?

 



8. Binärprotokoll-Cache und Cache-Größenkonfiguration

Die am Anfang erwähnte Größe von binlog_cache_size Problem, wann Wenn ein Ding gestartet wird, wird der Inhaltsspeicherplatz gemäß dem durch die Systemvariable binlog_cache_size angegebenen Wert zugewiesen. Wenn der angegebene Cache-Speicherplatz binlog_cache_size nicht ausreicht, wird ein Fehler gemeldet und das Ding wird zurückgesetzt

Die Einheit des Der hier angezeigte Datensatz besteht ebenfalls aus Bytes, geteilt durch 1024. Dies ist die Kapazität in MB. 20971520/1024/1024 entspricht hier 20 MB. Bei großen Transaktionsvorgängen, z. B. beim Testen, muss der Cache auf eine relativ große Größe eingestellt werden, sonst kann die Anweisung nicht erfolgreich ausgeführt werden

 

Der Unterschied Der Unterschied zwischen max_binlog_cache_size und binlog_cache_size besteht darin, dass ersterer ein Cache auf Instanzebene und letzterer ein Cache auf Sitzungsebene ist. Wenn die Parallelität groß ist, müssen Sie erwägen, max_binlog_cache_size etwas größer einzustellen.

Die Standardgröße für max_binlog_cache_size beträgt 4 GB, und der Maximalwert beträgt hier zum Testen 100 MB (104857600/1024,0/1024,0)

Die von max_binlog_cache_size festgelegte maximale Speichergröße beträgt 4 GB. Wenn der Serverinhalt groß ist, z. B. 128 GB oder mehr, kann es nicht schaden, max_binlog_cache_size standardmäßig auf das Maximum zu setzen, da dies für ein erfolgreiches gleichzeitiges Schreiben erforderlich ist.
Was die binlog_cache_size auf Sitzungsebene betrifft, können Sie sie an die Geschäftssituation anpassen. Ich persönlich bin der Meinung, dass es kein großes Problem darstellt, zusätzlich zu normalen OLTP-Vorgängen einige Daten zu verwenden Durch das Extrahieren oder Zusammenführen von Daten wie geplante Jobs können große Mengen an Protokollen generiert werden.
Es wird gesagt, dass Sie anhand von binlog_cache_disk_use und binlog_cache_use beurteilen können, ob binlog_cache_size angepasst werden muss.
Aber dieser Parameter wurde in MySQL5.7.18 nicht gefunden

9, andere Parameter des Binärprotokolls

max_binlog_stmt_cache_size ist Für nicht-transaktionale Anweisungen sind nicht-transaktionale Parameter im Moment nicht von Belang.
Ich erinnere mich, dass ich einmal einen Meister sagen sah, dass der Vorteil der Innodb-Engine nicht nur in der Transaktionsunterstützung im Vergleich zur nicht-transaktionalen Myisam-Engine liegt , lesen Die Leistungslücke wird immer kleiner, daher legt MySQL innodb als Standard-Engine fest.
Myisam aufzugeben und zu innodb zu gehen, ist der richtige Weg.
binlog_checksum wird als Master-Slave-Prüfsumme für die Replikation verwendet. Ich habe diesen Parameter noch nicht untersucht, daher werde ich ihn nicht allein lassen
Weitere Informationen finden Sie im Artikel von Xiangxiangshen.

Zusammenfassung:

Das MySQL-Binärprotokoll dient nicht nur der Funktionalität (Master-Slave-Replikation), sondern auch der Sicherheit (Binärprotokoll). ) und Transaktionsvorgänge, wenn das Binärprotokoll aktiviert ist, sodass es als wesentliche Konfiguration für eine Produktionsumgebung angesehen werden kann.
Gleichzeitig wirken sich seine verschiedenen Parameter auf bestimmte Vorgänge aus. Daher sollte den Parametern des Binärprotokolls besondere Aufmerksamkeit gewidmet werden, um sicherzustellen, dass die Funktionalität und Verfügbarkeit der Datenbank bei der Verwendung gewährleistet ist.

Referenz:

„Smear MySQL“

Und verschiedene Daumenkinos, Online-Materialien

Nehmen Handeln kann Ihre Denkmuster und Ängste verändern.

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Probleme im Zusammenhang mit dem MySQL-Binärprotokoll. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn