Analyse des MySQL-Beispiels DTID Master-Slave-Prinzip

Analyse des MySQL-Beispiels DTID Master-Slave-Prinzip

1. Grundkonzepte von GTID

Eine globale Transaktionskennung (GTID (Global Transaction ID)) wird seit MySQL 5.6.5 unterstützt und ist eine eindeutige Kennung, die erstellt und mit jeder auf dem Quellserver (Primärserver) ausgeführten Transaktion verknüpft wird.
Diese Kennung ist nicht nur eindeutig, sondern auch für alle Server in einer bestimmten Replikationskonfiguration eindeutig.
Es besteht eine Eins-zu-eins-Zuordnung zwischen allen Transaktionen und allen GTIDs.
Sie setzt sich aus der Server-ID und der Transaktions-ID zusammen.
Diese globale Transaktions-ID ist nicht nur auf dem ursprünglichen Server eindeutig, sondern auch auf allen MySQL-Servern, die über eine Master-Slave-Beziehung verfügen.
Genau aufgrund dieser Funktion wird die Master-Slave-Replikation von MySQL einfacher und die Datenbankkonsistenz zuverlässiger.
Ein GTID wird auf einem Server nur einmal ausgeführt, um eine wiederholte Ausführung zu vermeiden, die zu Datenverwirrungen oder Inkonsistenzen zwischen Master und Slave führen kann.

2. GTID-Vorteile

Stellen Sie sicher, dass dieselbe Transaktion auf einem Slave nur einmal ausgeführt wird und dass noch nicht ausgeführte GTID-Transaktionen immer ausgeführt werden.
Es besteht keine Notwendigkeit, die Genauigkeit der Binlog-Koordinaten wie bei der herkömmlichen Replikation sicherzustellen, da Binlog und Koordinaten überhaupt nicht benötigt werden.
Dies ist sehr praktisch beim Failover auf einen neuen Master und vereinfacht viele Aufgaben.
Ob die Daten von Master und Slave konsistent sind, lässt sich leicht feststellen. Solange die auf dem Master übermittelte Transaktion auch auf dem Slave übermittelt wird, muss sie konsistent sein.

3. So funktioniert GTID

Bildbeschreibung hier einfügen

1. Wenn eine Transaktion in der Masterdatenbank ausgeführt und festgeschrieben wird, wird eine GTID generiert und im Binlog-Protokoll aufgezeichnet.
2. Nachdem das Binärprotokoll an den Slave übertragen und im Relayprotokoll des Slaves gespeichert wurde, wird der GTID-Wert gelesen, um die Variable gtid_next festzulegen, die dem Slave den nächsten auszuführenden GTID-Wert mitteilt.
3. Der SQL-Thread erhält die GTID aus dem Relay-Protokoll und vergleicht dann das Binärprotokoll auf der Slave-Seite, um festzustellen, ob die GTID vorhanden ist.
4. Wenn ein Datensatz vorhanden ist, bedeutet dies, dass die Transaktion der GTID ausgeführt wurde und der Slave sie ignoriert.
5. Wenn kein Datensatz vorhanden ist, führt der Slave die GTID-Transaktion aus und zeichnet die GTID in seinem eigenen Binärprotokoll auf. Vor dem Lesen und Ausführen der Transaktion prüft er, ob andere Sitzungen die GTID enthalten, um sicherzustellen, dass sie nicht wiederholt ausgeführt wird.
6. Während des Analysevorgangs wird ermittelt, ob ein Primärschlüssel vorhanden ist. Wenn ja, wird der Sekundärindex verwendet. Wenn nicht, wird ein vollständiger Scan durchgeführt.

4. Vorteile von GTID gegenüber herkömmlicher Replikation

1. Einfachere Implementierung des Failovers, keine Notwendigkeit, log_file, log_pos zu finden

2. Einfacherer Aufbau einer Master-Slave-Replikation

3. Mehr Sicherheit

4.GTID ist kontinuierlich und lückenlos. Wenn also ein Konflikt in der Hauptdatenbank auftritt, können Sie ihn überspringen, indem Sie ein leeres Ereignis hinzufügen

5. Startmethode

  • Methode 1: Wenn es sich um einen neu erstellten Server handelt, starten Sie ihn einfach direkt
  • Methode 2: Wenn der Server läuft, müssen Sie den MySQL-Server neu starten

Schalten Sie vor dem Start den Schreibzugriff des Masters aus, um sicherzustellen, dass die Master- und Slave-Daten synchronisiert bleiben. Alle Slaves müssen den Konfigurationsparameter skip_slave_start=1 hinzufügen, um nach dem Start die Verwendung des vorherigen Replikationsprotokolls zu vermeiden.

6.GTID-Konfiguration (ein Master und ein Slave)

6.1 Umwelt:

centos8.0 IP: 192.168.136.239 mit Datenhostname: mysql01

centos8.0 IP: 192.168.136.219 keine Daten Hostname: mysql02

#Binärinstallation und selbststartender MySQL-Dienst werden weggelassen

6.2 Autorisieren Sie die Slave-Datenbank auf der Master-Datenbank:

mysql> gewähre Replikations-Slave auf *.* an 'Slave'@'192.168.136.219', identifiziert durch 'Slave';
Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
#Firewalls auf beiden Servern ausschalten [root@mysql01 ~]# systemctl stop firewalld
[root@mysql01 ~]# setenforce 0
[root@mysql02 ~]# systemctl stoppe Firewall
[root@mysql02 ~]# setenforce 0
Testen Sie die Verbindung aus der Bibliothek:
[root@mysql02 ~]# mysql -u slave -p'slave' -h192.168.136.239
Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen.
MySQL> 

6.3 Sicherstellen der Datenkonsistenz

1. Sperren Sie die Hauptdatenbanktabelle mysql> flush tables mit einer Lesesperre;
2. Bereiten Sie die Hauptdatenbank vor [root@mysql01 ~]# mysqldump -uroot -A > /clq/all-databases-20210519.sql
3. Kopieren Sie auf den Slave-Host [root@mysql01 ~]# scp /clq/all-databases-20210519.sql [email protected]:/backup/
[root@mysql02 Backup]# ll
-rw-r--r--. 1 root root 873527 19. Mai 16:40 all-databases-20210519.sql
4. Stellen Sie die Masterdatenbank aus der Datenbank [root@mysql02 backup]# mysql -uroot -pHuawei0917@ < all-databases-20210519.sql wieder her 

6.4 Konfigurieren Sie die Hauptbibliothek

[mysqld]
basedir = /usr/local/mysql
Datenverzeichnis = /opt/data
Socket = /tmp/mysql.sock
Port = 3306
Benutzer = MySQL
pid-Datei = /opt/data/mysql.pid
Namensauflösung überspringen
#Grant-Tabellen überspringen
log-bin = master_bin #Öffnen Sie das Master-Datenbankprotokoll server-id = 10 #Die eindeutige ID des Dienstes
gtid-mode = on #GTID-Modus an enforce_gtid_consistency = on #Erzwingt Konsistenz im GTID-Modus log-slave-updates = 1 #Slave-Datenbank ermöglicht Aktualisierungsprotokolle und synchronisiert Betriebsprotokolle binlog_format = row #Binlog-Protokollformat ist Zeilenformat, die Standardeinstellung ist gemischter Modus skip_slave_start = 1 #Slave-Datenbank überspringen und mit Master-Datenbank beginnen #System neu starten systemctl restart mysqld 

6.5 Konfigurieren der Slave-Bibliothek

[root@mysql02 Daten]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql 
Datenverzeichnis = /opt/data 
Socket = /tmp/mysql.sock 
Port = 3306
Benutzer = MySQL
pid-Datei = /opt/data/mysql.pid
Namensauflösung überspringen
#Grant-Tabellen überspringen 
gtid_mode=ein
enforce_gtid_consistency=ein
Server-ID = 20
log-bin=slave_binlog #Slave-Log öffnen log_slave-updates=1 #Slave-Updates sind erlaubt binlog_format=row #Format ist Zeile skip-slave_start=1   
#System neu starten 

Überprüfen Sie den GTID-Status

mysql> Variablen wie „%gtid%“ anzeigen;
+----------------------------------+------------+
| Variablenname | Wert |
+----------------------------------+------------+
| binlog_gtid_simple_recovery | EIN |
| enforce_gtid_consistency | EIN |
| gtid_executed_compression_perioden | 1000 |
| gtid_mode | EIN |
| gtid_next | AUTOMATISCH |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | AUS |
+----------------------------------+------------+
8 Zeilen im Satz (0,00 Sek.)

6.6 Master-Slave-Replikation konfigurieren

#Konfigurieren Sie die Slave-Datenbank als Root #help change master to Sie können das Hilfedokument Beispiel mysql> change master to
    -> master_host='192.168.136.239',
    -> Master-Benutzer = "Sklave",
    -> Master-Passwort = "Slave",
    -> master_port = 3306, #Master-Bibliotheksport-> master_auto_position = 1; #Position#master_use_gtid = current_pos
Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,01 Sek.)
mysql> Slave starten;  
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> Slave-Status anzeigen\G; 
Slave_IO_Running: Verbindung wird hergestellt
            Slave_IO_Running: Ja
            Slave_SQL_Running: Ja
Sicherstellen der Systemkonsistenz und Berechtigungskonsistenz

(Ein Master- und ein Slave-GTID)-Test :

Erstellen Sie einen Datenbanktest in der Hauptbibliothek zum Testen und Anzeigen

Erstellen Sie zum Testen eine Datenbank test02 aus der Bibliothek

#Erstellen Sie eine Testdatenbank in der Hauptdatenbankmysql> create database test;
mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
| Prüfung |
+--------------------+
#Überprüfen Sie den Synchronisierungsstatus der Datenbank mysql> show databases;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
| Prüfung |
+--------------------+
6 Zeilen im Satz (0,00 Sek.)

#Datenbank test02 aus der Bibliothek erstellenmysql> create database test02;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
#Hauptdatenbank anzeigenmysql> show databases;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
| sys | #Es gibt keine Test02-Bibliothek | Test |
+--------------------+
5 Zeilen im Satz (0,00 Sek.)

Zusammenfassung: Datenoperationen in der Masterdatenbank werden mit der Slavedatenbank synchronisiert, aber Datenoperationen in der Slavedatenbank haben keine Verbindung mit der Masterdatenbank.

7.GTID (ein Master und zwei Slaves)

Wenn das dritte MySQL angeschlossen ist, konfigurieren Sie es entsprechend

Das dritte MySQL, Version: CentOS8 IP: 192.168.136.230 Hostname: mysql03

[root@mysql03 ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
Datenverzeichnis = /opt/data
Socket = /tmp/mysql.sock
Port = 3306
Benutzer = MySQL
pid-Datei = /opt/data/mysql.pid
Namensauflösung überspringen
#Grant-Tabellen überspringen
# Replikationskonfiguration
log-bin = master_bin
Server-ID = 21 #ID muss sich von der vorherigen unterscheiden gtid-mode = on
erzwingen-gtid-Konsistenz = ein
log-slave-updates = 1
Binlog-Format = Zeile
Skip-Slave-Start = 1
#Überprüfen Sie den GTID-Statusmysql> zeigen Sie Variablen wie „%gtid%“ an;
+----------------------------------+------------+
| Variablenname | Wert |
+----------------------------------+------------+
| binlog_gtid_simple_recovery | EIN |
| enforce_gtid_consistency | EIN |
| gtid_executed_compression_perioden | 1000 |
| gtid_mode | EIN |
| gtid_next | AUTOMATISCH |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | AUS |
+----------------------------------+------------+
#Da zuvor nur eine IP-Adresse autorisiert wurde, autorisieren Sie eine andere IP-Adresse in der mysql01-Masterdatenbank
mysql> gewähre Replikations-Slave auf *.* an 'Slave'@'192.168.136.230', identifiziert durch 'Slave';
Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
#Verbindung testen [root@mysql ~]# mysql -uslave -pslave -h192.168.136.239
mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein.
Willkommen beim MySQL-Monitor. Befehle enden mit ; ​​oder \g.
Ihre MySQL-Verbindungs-ID ist 17
Serverversion: 5.7.33-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle und/oder seine Tochtergesellschaften.
Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer
Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen
Eigentümer.
Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen.
MySQL> 
#mysql03 stellt eine Verbindung zum Root-Benutzer der Datenbank her und führt die entsprechende Konfiguration durch [root@mysql03 ~]# mysql -uroot -p1
mysql> ändere Master in
    -> master_host='192.168.136.239', #Master-Datenbank-IP
    -> master_user='slave', #Normaler Benutzer, autorisiert durch die Master-Datenbank-> master_password='slave',
    -> master_port=3306, #Master-Datenbankport-> master_auto_position=1; #Positionssynchronisierung beginnt bei 1#Sie können auch die Hilfe zur Konfiguration anzeigenmysql> help change master to;
ÄNDERN SIE MASTER IN
  MASTER_HOST='source2.example.com',
  MASTER_USER='Replikation',
  MASTER_PASSWORD='Passwort',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='source2-bin.001',
  MASTER_LOG_POS=4,
  MASTER_CONNECT_RETRY=10;
URL: https://dev.mysql.com/doc/refman/5.7/en/change-master-to.html

#Öffnen Sie MySQL> starten Sie den Slave;
mysql> Slave-Status anzeigen\G;
*************************** 1. Reihe ***************************
               Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
                  Master_Host: 192.168.136.239
                  Master_User: Sklave
                  Master_Port: 3306
                Verbindungswiederholung: 60
              Master_Log_File: master_bin.000002
          Read_Master_Log_Pos: 2172
               Relay-Log-Datei:mysql-relay-bin.000002
                Relay_Log_Pos: 2387
        Relay_Master_Log_File: master_bin.000002
             Slave_IO_Running: Ja
            Slave_SQL_Running: Ja #Wenn zwei Ja angezeigt werden, war die Operation erfolgreich!
#mysql03 Überprüfen Sie die Datenbank, und der Datenbankinhalt wurde auch erfolgreich synchronisiertmysql> show databases;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
| Prüfung |
+--------------------+
5 Zeilen im Satz (0,00 Sek.)

8.GTID (zwei Master und ein Slave)

1. Neueste Umgebung

Version IP-Adresse Hostname Identität
centos8 192.168.136.239 master01 Hauptbibliothek
centos8 192.168.136.219 master02 Hauptbibliothek
centos8 192.168.136.230 Sklave Aus der Bibliothek

2. Auf allen Servern sind die Firewalls deaktiviert oder aktiviert

[root@master01 ~]# systemctl stoppe Firewall
[root@master01 ~]# systemctl Firewall deaktivieren
[root@master02 ~]# systemctl stoppe Firewall
[root@master02 ~]# systemctl Firewall deaktivieren
[root@slave ~]# systemctl stoppe Firewall
[root@slave ~]# systemctl Firewall deaktivieren

3. Autorisierte Verbindung

Die Bibliothek master01 autorisiert normale Benutzer

mysql> gewähre 'Benutzer'@'192.168.136.%' Replikations-Slave auf *.* an 'Benutzer';

Slave verbindet

[root@slave ~]# mysql -uuser -p'user' -h192.168.136.239
mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein.
Willkommen beim MySQL-Monitor. Befehle enden mit ; ​​oder \g.
Ihre MySQL-Verbindungs-ID ist 5
Serverversion: 5.7.33 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle und/oder seine Tochtergesellschaften.
Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer
Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen
Eigentümer.
Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen.

master02 autorisiert normale Benutzer

mysql> gewähre Replikations-Slave auf *.* an 'app'@'192.168.136.%', identifiziert durch 'app';
Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,01 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Slave verbindet

[root@slave ~]# mysql -uapp -papp -h192.168.136.219
mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein.
Willkommen beim MySQL-Monitor. Befehle enden mit ; ​​oder \g.
Ihre MySQL-Verbindungs-ID ist 3
Serverversion: 5.7.33 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle und/oder seine Tochtergesellschaften.
Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer
Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen
Eigentümer.
Geben Sie „help;“ oder „\h“ ein, um Hilfe zu erhalten. Geben Sie „\c“ ein, um die aktuelle Eingabeanweisung zu löschen.
MySQL> 

4. Ändern Sie die Konfigurationsdateien separat

#master01 Gastgeber:
[root@master01 ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
Datenverzeichnis = /opt/data
Socket = /tmp/mysql.sock
Port = 3306
Benutzer = MySQL
pid-Datei = /opt/data/mysql.pid
Namensauflösung überspringen
Skip-Grant-Tabellen
log-bin = master_bin
Server-ID = 10
gtid-mode = ein
erzwingen-gtid-Konsistenz = ein
log-slave-updates = 1
Binlog-Format = Zeile
Skip-Slave-Start = 1
#master02 Host [mysqld]
basedir = /usr/local/mysql
Datenverzeichnis = /opt/data
Socket = /tmp/mysql.sock
Port = 3306
Benutzer = MySQL
pid-Datei = /opt/data/mysql.pid
Namensauflösung überspringen
                      #Replikationskonfiguration
log-bin = master_bin
Server-ID = 11
gtid-mode = ein
erzwingen-gtid-Konsistenz = ein
log-slave-updates = 1
Binlog-Format = Zeile
Skip-Slave-Start = 1
#Slave-Host [mysqld]
basedir = /usr/local/mysql
Datenverzeichnis = /opt/data
Socket = /tmp/mysql.sock
Port = 3306
Benutzer = MySQL
pid-Datei = /opt/data/mysql.pid
Namensauflösung überspringen
log-bin = slave_bin
Server-ID = 13
gtid-mode = ein
erzwingen-gtid-Konsistenz = ein
log-slave-updates = 1
Binlog-Format = Zeile
Skip-Slave-Start = 1

5. Separat neu starten

[root@master01 ~]# systemctl restart mysqld
[root@master02 ~]# systemctl restart mysqld
[root@slave ~]# systemctl starte mysqld neu

6. Bevor wir GTID mit mehreren Mastern und einem Slave konfigurieren, wollen wir ein Konzept vorstellen

channel : Jeder Kanal ist ein unabhängiger Slave-Dienst mit einem IO_THREAD und SQL_THREAD. Das Prinzip ist das gleiche wie bei der normalen Replikation, außer dass nach der Anweisung „Change Master to“ FOR Channel verwendet werden muss, um die Slaves zu unterscheiden.

Wenn Sie einen Kanal verwenden, müssen Sie das Master-Info-Repository und das Relay-Log-Info-Repository der Slave-Bibliothek auf Tabelle setzen, andernfalls wird ein Fehler gemeldet.

Festlegen des Informationsrepositorys auf Tabellenformat

Methode 1 (Einstellung in MySQL):
Setzen Sie das globale Master-Info-Repository = "Tabelle".
Setzen Sie das globale relay_log_info_repository='Tabelle'.
Methode 2 (eingestellt in /etc/my.cnf):
3. Setzen Sie master_info_repository = TABLE in my.cnf 
relay_log_info_repository = TABELLE   
#Überprüfen Sie, ob die Änderung erfolgreich warmysql> Variablen anzeigen, bei denen der Variablenname in ('relay_log_info_repository','master_info_repository'); ist.
+-----------------------------------------+----------+
| Variablenname | Wert |
+-----------------------------------------+----------+
| Master_Info_Repository | TABELLE |
| relay_log_info_repository | TABELLE |
+-----------------------------------------+----------+

7.Slave meldet sich als Root-Benutzer an, um GTID zu konfigurieren

#slave konfiguriert zwei Master-Bibliotheken GTID-Replikation auf der Slave-Bibliothek mysql> ändere Master in
    -> master_host='192.168.136.219', #mysql02 Master-Datenbank-IP
    -> master_user='app', #Durch die mysql02-Masterdatenbank autorisierter Normalbenutzer-> master_password='app', #Durch die mysql02-Masterdatenbank autorisiertes Normalbenutzerkennwort-> master_port=3306, #Port der Masterdatenbank-> master_auto_position=1 für Kanal 'master01'; #Die Positionssynchronisierung beginnt bei 1 und der erste Slave heißt master01
mysql> ändere Master in
    -> master_host='192.168.136.239', #mysql01 Master-Datenbank-IP
    -> master_user='Benutzer',              
    -> master_password='Benutzer',          
    -> master_port=3306, #Master-Bibliotheksport-> master_auto_position=1 für Kanal „master02“; #Die Positionssynchronisierung beginnt bei 1 und der erste Slave heißt master01
#Überprüfen Sie den Status von zwei Slavesmysql> show slave status\G;
*************************** 1. Reihe ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.136.219
                  Master_User: app
                  Master_Port: 3306
                Verbindungswiederholung: 60
              Master_Log_Datei: 
          Read_Master_Log_Pos: 4
               Relay_Log_File: slave02-relay-bin-master1.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: 
             Slave_IO_Running: Nein
            Slave_SQL_Running: Nein #Alle sind geschlossen Replicate_Do_DB: 
          Replikat_Ignorieren_DB: 
           Tabelle_replizieren: 
       Tabelle_Ignorieren_replizieren: 
      Wild_Do_Tabelle replizieren: 
  Tabelle_Wild_Ignore_replizieren: 
                   Last_Errno: 0
                   Letzter_Fehler: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 0
              Relay_Log_Space: 154
              Until_Condition: Keine
               Bis_Log_Datei: 
                Bis_Log_Pos: 0
           Master_SSL_Allowed: Nein
           Master_SSL_CA_Datei: 
           Master_SSL_CA_Pfad: 
              Master_SSL_Zertifikat: 
            Master_SSL_Chiffre: 
               Master_SSL_Schlüssel: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: Nein
                Last_IO_Errno: 0
                Letzter_E/A-Fehler: 
               Last_SQL_Errno: 0
               Letzter_SQL_Fehler: 
  Server-IDs replizieren_ignorieren: 
             Master_Server_Id: 0
                  Master_UUID: 
             Master_Info_Datei: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
           Master_Retry_Count: 86400
                  Master_Bind: 
      Zeitstempel des letzten IO-Fehlers: 
     Letzter_SQL_Fehler_Zeitstempel: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Abgerufenes_Gtid_Set: 
            Ausgeführtes_Gtid_Set: b4326a77-0a31-11ec-a991-000c298d3571:1-2,
d68b404d-0a35-11ec-9df1-000c29581959:1
                Auto_Position: 1
         DB replizieren_neu schreiben: 
                 Kanalname: master1
           Master_TLS_Version: 
*************************** 2. Reihe ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.136.239
                  Master_User: Benutzer
                  Master_Port: 3306
                Verbindungswiederholung: 60
              Master_Log_Datei: 
          Read_Master_Log_Pos: 4
               Relay_Log_File: slave02-relay-bin-master2.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: 
             Slave_IO_Running: Nein
            Slave_SQL_Running: Nein
              Replicate_Do_DB: 
          Replikat_Ignorieren_DB: 
           Tabelle_replizieren: 
       Tabelle_Ignorieren_replizieren: 
      Wild_Do_Tabelle replizieren: 
  Tabelle_Wild_Ignore_replizieren: 
                   Last_Errno: 0
                   Letzter_Fehler: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 0
              Relay_Log_Space: 154
              Until_Condition: Keine
               Bis_Log_Datei: 
                Bis_Log_Pos: 0
           Master_SSL_Allowed: Nein
           Master_SSL_CA_Datei: 
           Master_SSL_CA_Pfad: 
              Master_SSL_Zertifikat: 
            Master_SSL_Chiffre: 
               Master_SSL_Schlüssel: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: Nein
                Last_IO_Errno: 0
                Letzter_E/A-Fehler: 
               Last_SQL_Errno: 0
               Letzter_SQL_Fehler: 
  Server-IDs replizieren_ignorieren: 
             Master_Server_Id: 0
                  Master_UUID: 
             Master_Info_Datei: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
           Master_Retry_Count: 86400
                  Master_Bind: 
      Zeitstempel des letzten IO-Fehlers: 
     Letzter_SQL_Fehler_Zeitstempel: 
               Master_SSL_Crl: 
           Master_SSL_Crlpfad: 
           Abgerufenes_Gtid_Set: 
            Ausgeführtes_Gtid_Set: b4326a77-0a31-11ec-a991-000c298d3571:1-2,
d68b404d-0a35-11ec-9df1-000c29581959:1
                Auto_Position: 1
         DB replizieren_neu schreiben: 
                 Kanalname: master2
           Master_TLS_Version: 
2 Zeilen im Satz (0,00 Sek.)
#Öffne zwei Slaves
mysql> Slave starten;
# Überprüfen Sie den Status erneut

GTID-Test (zwei Master und ein Slave):

#master01 Hauptbibliothek erstellt eine Testdatenbankmysql> create database test;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
| Prüfung |
+--------------------+
5 Zeilen im Satz (0,00 Sek.)
#Zeigen Sie die Datenbank master02 auf MySQL an> show databases;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
| sys | #Kein Inhalt+--------------------+
4 Zeilen im Satz (0,00 Sek.)
#Slave-Ansicht aus der Bibliothekmysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
| test | #Die Testbibliothek wurde synchronisiert+--------------------+
5 Zeilen im Satz (0,00 Sek.)
#Erstellen Sie eine RHCA-Datenbank in der Hauptdatenbank mysql02mysql> create database RHCA;
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|RHCA|
|mysql |
| Leistungsschema |
|System|
+--------------------+
5 Zeilen im Satz (0,00 Sek.)
#Slave aus der Bibliothek mysql> show databases;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|RHCA|
|mysql |
| Leistungsschema |
| sys | #Mit der Testbibliothek der mysql01-Hauptbibliothek und der RHCA-Bibliothek von mysql02 | test |
+--------------------+
6 Zeilen im Satz (0,00 Sek.)

Slave-bezogene Befehle:

show slave status; //Alle Slave-Status anzeigen

zeige den Slave-Status für Kanal 'naem'; //Den Status eines einzelnen Slaves anzeigen

Slave zurücksetzen; #Alle Slaves zurücksetzen

Slave für Kanal „Master1“ zurücksetzen; #Einen einzelnen Slave zurücksetzen

Slave für Kanal „Master1“ stoppen; #Einen einzelnen Slave stoppen

starte Slave für Kanal 'Master1'; #Starte einen einzelnen Slave

Obwohl ich dabei keine Fehler festgestellt habe, ist der folgende der am häufigsten auftretende Fehler

Nach der Konfiguration tritt beim Starten des Slaves ein Fehler auf

mysql> Slave starten;
FEHLER 1872 (HY000): Slave konnte die Relay-Log-Infostruktur aus dem Repository nicht initialisieren

Lösung des Problems

Da die Tabelle mysql.slave_relay_log_info die vorherigen Replikationsinformationen enthält, kann die entsprechende Datei beim Starten der neuen Slave-Bibliothek nicht gefunden werden. In diesem Fall können wir die Datensätze in der Tabelle löschen.

mysql> Slave zurücksetzen;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Oben finden Sie den detaillierten Inhalt der Analyse des MySQL-Beispiel-DTID-Master-Slave-Prinzips. Weitere Informationen zum MySQL-Beispiel-DTID-Master-Slave-Prinzip finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Das Implementierungsprinzip der MySQL-Master-Slave-Synchronisation
  • Interpretation der MySQL Master-Slave-Konfiguration und deren prinzipielle Analyse (Master-Slave)
  • Detaillierte Erläuterung der Rolle und des Funktionsprinzips der MySQL-Master-Slave-Replikation
  • MySQL Master-Slave-Prinzip und Konfigurationsdetails
  • Einführung in das MySQL-Master-Slave-Synchronisationsprinzip
  • Detaillierte Erläuterung des Prinzips und der Praxis der MySQL-Master-Slave-Replikation

<<:  Tutorial zur Installation und Browserverwendung des leichten Objektspeicherdienstes Minio

>>:  CSS-Code-Abkürzung div+css-Layout-Code-Abkürzungsspezifikation

Artikel empfehlen

Das Prinzip und die Anwendung der ES6-Dekonstruktionszuweisung

Inhaltsverzeichnis Array-Destrukturierungszuweisu...

Zusammenfassung gängiger Befehle in Dockerfile

Syntaxzusammensetzung: 1 Anmerkungsinformationen ...

So stellen Sie Oracle mit Docker auf dem Mac bereit

So stellen Sie Oracle mit Docker auf dem Mac bere...

Node+Socket realisiert einfache Chatroom-Funktion

In diesem Artikel wird der spezifische Code von N...

So installieren Sie die Odoo12-Entwicklungsumgebung unter Windows 10

Vorwort Da viele Freunde sagen, dass sie keinen M...

Umfassende Analyse der Isolationsebenen in MySQL

Wenn die Datenbank gleichzeitig denselben Datenst...

Vue implementiert die Countdown-Komponente für zweite Kills

In diesem Artikel wird der spezifische Code von V...

Grafisches Tutorial zur Deinstallation und Installation von MySQL unter Linux

Dies ist mein erster Blog. Ich bin seit zwei Jahr...

Detaillierte Schritte zur schnellen Installation von Openshift

Der schnellste Weg, die neueste Version von OpenS...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.15

In diesem Artikel wird die Installations- und Kon...