Spezifische Verwendung des MySQL-Parameters binlog_ignore_db

Spezifische Verwendung des MySQL-Parameters binlog_ignore_db

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:

  • binlog_do_db: Dieser Parameter bedeutet, dass nur die Binärprotokolle der angegebenen Datenbank aufgezeichnet werden. Standardmäßig werden alle Protokolle aufgezeichnet.
  • binlog_ignore_db: Dieser Parameter gibt an, dass das Binärprotokoll der angegebenen Datenbank nicht aufgezeichnet wird.

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:

  • Für den Vorgang wurde keine Datenbank ausgewählt, alles wird protokolliert.
  • Wählen Sie testdb aus und führen Sie Operationen an testdb bzw. logdb aus. Alle Bibliotheken werden aufgezeichnet.
  • Wählen Sie logdb aus und führen Sie die Operationen mit testdb bzw. logdb aus. Es werden nicht alle Bibliotheken aufgezeichnet.
  • Wenn Sie eine Bibliothek auswählen und nur mit der aktuellen Bibliothek arbeiten, erfolgt die Aufzeichnung normal und logdb wird nicht aufgezeichnet.

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:
  • MySQL-Reihe: Redo-Log, Undo-Log und Binlog – ausführliche Erklärung
  • So wählen Sie das Format bei der Verwendung von Binlog in MySQL
  • Detaillierte Erläuterung des Binlog-Protokollanalysetools zur Überwachung von MySQL: Canal
  • Ausführliche Erklärung des Binlogs in MySQL 8.0
  • Zusammenfassung einiger Gedanken zur Binlog-Optimierung in MySQL
  • Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs
  • Schritte zum Aktivieren des MySQL-Datenbanküberwachungs-Binlogs
  • So unterscheiden Sie MySQLs innodb_flush_log_at_trx_commit und sync_binlog

<<:  js realisiert den Lupeneffekt von Produkten auf Einkaufswebsites

>>:  Docker startet das Elasticsearch-Image und behebt den Fehler nach dem Mounten des Verzeichnisses

Artikel empfehlen

Verständnis und Beispielcode des Vue-Standardslots

Inhaltsverzeichnis Was ist ein Slot Grundlegendes...

Docker-Installations- und Konfigurationsschritte für das Redis-Image

Inhaltsverzeichnis Vorwort Umfeld Installieren Er...

Front-End-JavaScript-Versprechen

Inhaltsverzeichnis 1. Was ist Promise 2. Grundleg...

Detaillierte Erklärung der grundlegenden HTML-Tags und -Strukturen

1. HTML-Übersicht 1.HTML: Hypertext Markup Langua...

Über die Fallstricke bei der Implementierung der angegebenen Kodierung in MySQL

Vorne geschrieben Umgebung: MySQL 5.7+, MySQL-Dat...

Tomcat analysiert XML und erstellt Objekte durch Reflektion

Der folgende Beispielcode stellt die Prinzipien d...

Hinweise zu den Formularkomponenten des Elements

Elementform und Codeanzeige Weitere Einzelheiten ...

Ubuntu-Grundlagen-Tutorial: apt-get-Befehl

Vorwort Der Befehl apt-get ist ein Paketverwaltun...

Detaillierte Anweisungen zur Installation von Jenkins auf Ubuntu 16.04

1. Voraussetzungen JDK wurde installiert echo $PA...

CSS3-Implementierungscode für einfaches Karussellbildschneiden

Umsetzungsideen Erstellen Sie zunächst einen über...