Vorwort: Nach dem Studium des vorherigen Artikels wissen wir, dass Binlog alle in der Datenbank ausgeführten DDL- und DML-Anweisungen aufzeichnet (mit Ausnahme von Datenabfrageanweisungen wie „Select“ und „Show“). Beachten Sie, dass standardmäßig alle Bibliotheksvorgänge aufgezeichnet werden. Wenn wir alternative Anforderungen haben, z. B. nur einer bestimmten Bibliothek die Aufzeichnung von Binglogs zu erlauben oder eine bestimmte Bibliothek von der Aufzeichnung von Binlogs auszuschließen, werden solche Anforderungen unterstützt? Schauen wir uns diesen Artikel gemeinsam an. 1. binlog_do_db und binlog_ignore_db Wenn Binlog für eine Datenbankinstanz aktiviert ist, führen wir den Befehl „Show Master Status“ aus und sehen uns die Optionen Binlog_Do_DB und Binlog_Ignore_DB an. mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000009 | 282838 | | | | +---------------+----------+-------------+------------------+-------------------+ Standardmäßig sind diese beiden Optionen leer. Was also bewirken diese beiden Parameter? Ist das wörtlich so gemeint, dass das eine nur einer bestimmten Bibliothek erlaubt, Binglog aufzuzeichnen, und das andere eine bestimmte Bibliothek von der Aufzeichnung von Binlog ausschließt? Der Autor hat die offizielle Dokumentation konsultiert und die Funktionen dieser beiden Parameter kurz erläutert:
Diese beiden Parameter schließen sich gegenseitig aus. Im Allgemeinen ist nur einer von ihnen ausgewählt und kann nur in der Startbefehlszeile oder in der Konfigurationsdatei hinzugefügt werden. Geben Sie wie folgt mehrere Datenbanken an, die in separate Zeilen geschrieben werden sollen: # Geben Sie db1 db2 an, um Binlog aufzuzeichnen [mysqld] binlog_do_db = db1 binlog_do_db = db2 # Verhindern Sie, dass db3 und db4 Binlog aufzeichnen [mysqld] binlog_ignore_db = db3 binlog_ignore_db = db4 Darüber hinaus hängt die spezifische Wirkung dieser beiden Parameter auch mit dem Binlog-Format zusammen. In einigen Fällen hat das Festlegen des Binlog-Formats auf STATEMENT oder ROW unterschiedliche Auswirkungen. In tatsächlichen Anwendungen wird binlog_ignore_db häufiger verwendet. Wenn beispielsweise die Daten in einer bestimmten Datenbank nicht sehr wichtig sind, lassen wir die Datenbank möglicherweise nicht binlog aufzeichnen, um den Schreibdruck auf dem Server zu verringern. Es gibt auch Online-Artikel, die besagen, dass das Setzen von binlog_ignore_db zu Slave-Synchronisierungsfehlern führt. Welchen Effekt hat also das Setzen dieses Parameters? Lassen Sie uns ein konkretes Experiment durchführen. 2. Spezifische Auswirkungen von binlog_ignore_db Zunächst einmal ist meine Testdatenbankinstanz die Community-Version 5.7.23 mit zwei Geschäftsdatenbanken, testdb und logdb. Wir haben logdb so eingestellt, dass binlog nicht aufgezeichnet wird. Lassen Sie uns ein konkretes Experiment durchführen: # Binlog ist im ROW-Format # 1. Verwenden Sie nicht use db mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+------------------+ | binlog.000011 | 154 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ mysql> Datenbank auswählen(); +------------+ | Datenbank() | +------------+ | NULL | +------------+ 1 Zeile im Satz (0,00 Sek.) mysql> CREATE TABLE testdb.`test_tb1` (id int, name varchar(30)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,06 Sek.) mysql> in testdb.test_tb1 Werte einfügen (1001, 'sdfde'); Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 653 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> CREATE TABLE logdb.`log_tb1` (id int, name varchar(30)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) mysql> in logdb.log_tb1-Werte einfügen (1001, 'sdfde'); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 883 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ mysql> in logdb.log_tb1 Werte einfügen (1002, 'sdsdfde'); Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 883 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ mysql> Tabelle logdb.log_tb1 ändern, Spalte c3 hinzufügen, varchar (20); Abfrage OK, 0 Zeilen betroffen (0,12 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 1070 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ # Fazit: Andere Bibliotheken zeichnen normal auf. Die Logdb-Bibliothek zeichnet DDL auf, aber nicht DML. # 2. Verwenden Sie testdb für alle Datenbankenmysql> use testdb; Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten Datenbank geändert mysql> Datenbank auswählen(); +------------+ | Datenbank() | +------------+ |testdb| +------------+ 1 Zeile im Satz (0,00 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 1070 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> CREATE TABLE `test_tb2` (id int, name varchar(30)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) mysql> in test_tb2-Werte einfügen (1001, 'sdfde'); Abfrage OK, 1 Zeile betroffen (0,04 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 1574 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> CREATE TABLE logdb.`log_tb2` (id int, name varchar(30)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 1810 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> in logdb.log_tb2 Werte einfügen (1001, 'sdfde'); Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 1810 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) # Fazit: Die logdb-Bibliothek zeichnet auch DDL auf, aber kein DML # 3. Verwenden Sie logdb datenbankübergreifendmysql> use logdb; Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten Datenbank geändert mysql> Datenbank auswählen(); +------------+ | Datenbank() | +------------+ | logdb | +------------+ 1 Zeile im Satz (0,00 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 1810 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> CREATE TABLE testdb.`test_tb3` (id int, name varchar(30)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,23 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 1810 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> in testdb.test_tb3 Werte einfügen (1001, 'sdfde'); Abfrage OK, 1 Zeile betroffen (0,02 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 2081 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> CREATE TABLE `log_tb3` (id int, name varchar(30)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 2081 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> in log_tb3-Werte einfügen (1001, 'sdfde'); Abfrage OK, 1 Zeile betroffen (0,02 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 2081 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) # Fazit: logdb zeichnet keine DDL anderer Bibliotheken auf # 4. Jeder Vorgang betritt diese Datenbank und überschreitet keine Datenbankenmysql> use testdb; Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten Datenbank geändert mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 2081 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> CREATE TABLE `test_tb4` (id int, name varchar(30)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) mysql> in test_tb4-Werte einfügen (1001, 'sdfde'); Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 2585 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> logdb verwenden; Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten Datenbank geändert mysql> CREATE TABLE `log_tb4` (id int, name varchar(30)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Abfrage OK, 0 Zeilen betroffen (0,04 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 2585 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> in log_tb4-Werte einfügen (1001, 'sdfde'); Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> Masterstatus anzeigen; +---------------+----------+-------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+-------------+------------------+-------------------+ | binlog.000011 | 2585 | | logdb | | +---------------+----------+-------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) # Fazit: Alle anderen Bibliotheken zeichnen auf, aber logdb zeichnet nicht auf Stellen Sie das Binlog-Format auf ähnliche Weise auf STATEMENT ein und testen Sie erneut. Ich werde hier nicht näher auf den Testvorgang eingehen, sondern die experimentellen Ergebnisse unter dem STATEMENT-Format zusammenfassen:
Sind Sie von so vielen experimentellen Daten überwältigt? Lassen Sie uns sie in Form einer Mindmap wie folgt zusammenfassen: Es scheint, dass die Wirkung des Parameters binlog_ignore_db tatsächlich von vielen Faktoren abhängt. Insbesondere wenn Slave-Bibliotheken vorhanden sind, sollte die Master-Bibliothek bei der Verwendung dieses Parameters besonders vorsichtig sein, da es leicht zu Master-Slave-Synchronisierungsfehlern kommen kann. Wenn Sie jedoch strenge Standards einhalten und nur mit der aktuellen Datenbank arbeiten, tritt kein Problem auf. Dies sagt uns auch, dass wir die Standards strikt einhalten und dem Geschäftskonto nur Berechtigungen für eine einzige Datenbank erteilen müssen, wodurch sich auch verschiedene Probleme vermeiden lassen. Zusammenfassen: Ich frage mich, ob Sie als Leser an dieser Art von Artikeln zur Einführung von Parametern interessiert sind? Vielleicht sind dies die Dinge, die dem Betriebs- und Wartungspersonal der Datenbank größere Sorgen bereiten. Dieser Artikel stellt hauptsächlich die spezifische Rolle des binlog_ignore_db-Parameters von binlog vor. Die experimentelle Umgebung dieses Artikels ist möglicherweise nicht umfassend genug. Interessierte Studierende können die offizielle Dokumentation zu Rate ziehen, um ein tieferes Verständnis dieses Parameters zu erlangen. Oben finden Sie detaillierte Informationen zur Verwendung von MySQL-Binlog-Parametern. Weitere Informationen zu MySQL-Binlog-Parametern finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: js realisiert den Lupeneffekt von Produkten auf Einkaufswebsites
>>: Docker startet das Elasticsearch-Image und behebt den Fehler nach dem Mounten des Verzeichnisses
p>Manuell in "Dienste" starten und e...
Inhaltsverzeichnis Was ist ein Slot Grundlegendes...
Inhaltsverzeichnis Vorwort Umfeld Installieren Er...
Inhaltsverzeichnis 1. Was ist Promise 2. Grundleg...
Inhaltsverzeichnis 1. Kurze Einführung 2. Screens...
1. HTML-Übersicht 1.HTML: Hypertext Markup Langua...
Vorne geschrieben Umgebung: MySQL 5.7+, MySQL-Dat...
Es gibt viele Versionen der Java-Sprache. Zusätzl...
In Schreibstilen können wir diese Situation oft s...
Der folgende Beispielcode stellt die Prinzipien d...
Inhaltsverzeichnis 1. Beschreibung der Funktionen...
Elementform und Codeanzeige Weitere Einzelheiten ...
Vorwort Der Befehl apt-get ist ein Paketverwaltun...
1. Voraussetzungen JDK wurde installiert echo $PA...
Umsetzungsideen Erstellen Sie zunächst einen über...