Dieser Artikel vermittelt Ihnen relevantes Wissen über den Prozess des Schreibens von Binärprotokollen in MySQL, einschließlich Fragen im Zusammenhang mit „sync_binlog“, „binlog_cache_size“ und „max_binlog_cache_size“. Ich hoffe, dass er für alle hilfreich ist.
Werfen wir zunächst einen Blick auf die Beschreibung der sync_binlog-Konfiguration im offiziellen Dokument.
Befehlszeilenformat | --sync-binlog=# |
Systemvariablen | . sync _binlog |
Einflussbereich | Global |
Dynamisch | Ja |
SET_VAR-Eingabeaufforderung gilt | Nein |
Typ | Ganzzahl |
Standard. | 1 |
Minimaler Wert | 0 |
Maximaler Wert | 2^32=4294967295 |
Steuern Sie, wie oft der MySQL-Server Binärprotokolle mit der Festplatte synchronisiert.
sync_binlog=0: MySQL-Server daran hindern, Binärprotokolle mit der Festplatte zu synchronisieren. Stattdessen verlässt sich der MySQL-Server darauf, dass das Betriebssystem das Binärprotokoll von Zeit zu Zeit auf die Festplatte schreibt, so wie es auch jede andere Datei tun würde. Diese Einstellung bietet die beste Leistung, aber im Falle eines Stromausfalls oder eines Betriebssystemabsturzes verfügt der Server möglicherweise über festgeschriebene Transaktionen, die noch nicht geleert wurden.
sync_binlog=1: Aktivieren Sie die Synchronisierung des Binärprotokolls mit der Festplatte, bevor Sie eine Transaktion festschreiben. Dies ist die sicherste Einstellung, kann sich jedoch aufgrund erhöhter Schreibvorgänge auf die Festplatte negativ auf die Leistung auswirken. Bei einem Stromausfall oder Betriebssystemabsturz liegen die im Binärlog verlorenen Transaktionen nur im vorbereiteten Zustand vor. Dies ermöglicht eine regelmäßige automatische Wiederherstellung zum Zurücksetzen von Transaktionen und stellt so sicher, dass Transaktionen nicht aus dem Binärprotokoll verloren gehen.
sync_binlog=N, was ein anderer Wert als 0 oder 1 ist: Nachdem N Binärprotokoll-Übermittlungsgruppen gesammelt wurden, wird das Binärprotokoll mit der Festplatte synchronisiert. Im Falle eines Stromausfalls oder eines Betriebssystemabsturzes kann es sein, dass der Server Transaktionen festgeschrieben hat, die noch nicht in das Binärprotokoll geschrieben wurden. Diese Einstellung kann sich aufgrund erhöhter Festplattenschreibvorgänge negativ auf die Leistung auswirken. Höhere Werte verbessern die Leistung, erhöhen jedoch das Risiko eines Datenverlusts.
InnoDB
Um die größtmögliche Haltbarkeit und Konsistenz in einem mit Transaktionen verwendeten Replikationssetup zu erreichen, verwenden Sie die folgenden Einstellungen: InnoDB
为了在与事务一起使用 的复制设置中获得最大可能的持久性和一致性,请使用以下设置:
sync_binlog=1.innodb_flush_log_at_trx_commit=1.警告
许多操作系统和一些磁盘硬件欺骗了刷新到磁盘操作。他们可能会告诉 mysqld已经发生了刷新,即使它还没有发生。在这种情况下,即使使用推荐的设置也无法保证事务的持久性,在最坏的情况下,断电可能会损坏
InnoDB
InnoDB
-Daten beschädigen. Durch die Verwendung eines batteriegepufferten Festplattencaches im SCSI-Festplattencontroller oder auf der Festplatte selbst werden Dateiaktualisierungen beschleunigt und der Betrieb sicherer. Sie können auch versuchen, das Caching von Festplattenschreibvorgängen im Hardware-Cache zu deaktivieren. sync_binlog-Einstellungstyp ist eine vorzeichenlose Ganzzahl.
Im Allgemeinen ist es nicht auf 0 gesetzt. 0 hängt vom Systembetrieb und unregelmäßigem fsync ab. Gefährlicher ist es, wenn ein Stromausfall oder ein Systemabsturz auftritt – die Transaktion wird übermittelt, aber das Binärprotokoll fehlt.
Darüber hinaus können wir durch die Beschreibung von sync_binlog = 0 auch ungefähr das Gefühl haben, dass die Transaktion beim Senden zwar nicht sofort fsync ist, aber tatsächlich in den Seitencache des Dateisystems geschrieben wurde. MySQL befindet sich in der Transaktion. Beim Ausführen gibt es auch einen Cache, der das in der Transaktion generierte Binärprotokoll zwischenspeichert. | Sehen wir uns weiterhin die Cache-bezogene Konfiguration des Binärprotokolls an, wenn die Transaktion ausgeführt wird.
binlog_cache_size |
---|---|
Befehlsformat | |
Systemvariable | |
range | |
Dynamisch | |
SET_VAR-Eingabeaufforderung gilt | |
Typ | |
Standardwert | |
Minimaler Wert | |
Maximaler Wert ( 64 -Bit-Plattform) | |
max (32-Bit-Plattform) |
Die Größe des Speicherpuffers zur Speicherung binärer Protokolländerungen während einer Transaktion. Der Wert muss ein Vielfaches von 4096 sein.
Wenn die binäre Protokollierung auf einem Server aktiviert ist (die Systemvariable log_bin ist auf ON gesetzt), wird jedem Client ein binärer Protokollcache zugewiesen, wenn der Server eine Transaktionsspeicher-Engine unterstützt. Wenn die Daten einer Transaktion den Platz im Speicherpuffer überschreiten, werden die überschüssigen Daten in einer temporären Datei gespeichert. Wenn die binäre Protokollverschlüsselung auf dem Server aktiv ist, wird der Speicherpuffer nicht verschlüsselt, aber (ab MySQL 8.0.17) werden alle temporären Dateien, die zum Speichern des binären Protokollcaches verwendet werden, verschlüsselt. Nachdem jede Transaktion festgeschrieben wurde, wird der Binärprotokoll-Cache zurückgesetzt, indem der Speicherpuffer gelöscht und die temporäre Datei (falls verwendet) abgeschnitten wird.
Wenn Sie häufig große Transaktionen verwenden, können Sie diese Cachegröße für eine bessere Leistung erhöhen, indem Sie das Schreiben temporärer Dateien reduzieren oder ganz überflüssig machen. Binlog_cache_use (Dienststatusvariable – die Anzahl der Transaktionen, die den Binärprotokoll-Cache verwenden) und Binlog_cache_disk_use (Dienststatusvariable – die Anzahl der Transaktionen, die den temporären Binärprotokoll-Cache verwenden, aber den binlog_cache_size-Wert überschreiten und temporäre Dateien zum Speichern von Transaktionsanweisungen verwenden.) Statusvariablen kann verwendet werden, um diese variable Größe anzupassen. Siehe Abschnitt 5.4.4, „Binärprotokolle“.
binlog_cache_size
Legt nur die Größe des Transaktionscache fest; die Größe des Anweisungscache wird durch die Systemvariable binlog_stmt_cache_size gesteuert.
Befehlsformat | --max-binlog-cache-size=# |
Systemvariablen | max_binlog_cache_size |
range | Golbal |
Dynamisch | Ja |
SET_VAR-Eingabeaufforderung gilt | Nein |
Typ | Ganzzahl |
Standardwert | 2^64 =18 446744073709547520 |
Minimum | 4096 |
maximal | 2^64=18446744073709547520 |
Blockgröße | 4096 |
Wenn eine Transaktion mehr als diese Anzahl an Bytes Speicher benötigt, generiert der Server eine Transaktion mit mehreren Anweisungen, die mehr als „max_binlog_cache_size“ Bytes an Speicherfehler erfordert. Der Mindestwert ist 4096. Der maximal mögliche Wert beträgt 16EiB (Exbibyte). Der empfohlene Höchstwert liegt bei 4 GB. Dies liegt daran, dass MySQL derzeit keine binären Protokollspeicherorte verarbeiten kann, die größer als 4 GB sind. Der Wert muss ein Vielfaches von 4096 sein.
max_binlog_cache_size
legt nur die Größe des Transaktionscache fest; die Obergrenze des Anweisungscache wird durch die Systemvariable max_binlog_stmt_cache_size gesteuert. max_binlog_cache_size
仅设置事务缓存的大小;语句缓存的上限由 max_binlog_stmt_cache_size 系统变量控制。
会话的可见性 max_binlog_cache_size
max_binlog_cache_size
entspricht der Sichtbarkeit der Systemvariablen binlog_cache_size. Mit anderen Worten: Eine Änderung ihres Werts wirkt sich nur auf neue Sitzungen aus, die nach der Änderung des Werts gestartet werden. ZusammenfassungEmpfohlenes Lernen: MySQL-Video-Tutorial
🎜Das obige ist der detaillierte Inhalt vonBeherrschen Sie den Prozess des Schreibens von Binärprotokollen in MySQL vollständig. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!