Analyse des Prinzips und der Funktion der MySQL-Datenbank-Master-Slave-Replikation

Analyse des Prinzips und der Funktion der MySQL-Datenbank-Master-Slave-Replikation

1. Datenbank-Master-Slave-Klassifizierung:

Es gibt zwei Arten von Master-Slave: traditioneller Master-Slave/GTID Master-Slave

2. Ursprung der MySQL-Master-Slave-Einführung

Im wirklichen Leben sind Daten äußerst wichtig. Es gibt viele Möglichkeiten, Datenbanken zu speichern, aber in Datenbanken steckt eine versteckte Gefahr.
Versteckte Gefahren:

Wenn Sie eine Datenbank zum Speichern von Daten verwenden und der Datenbankserver abstürzt, gehen Daten verloren. Wenn zu viele Daten vorhanden sind und die Anzahl der Besuche groß ist, kann ein Server die Servicequalität nicht garantieren.

Daher wurde die Master-Slave-Datenbank geboren

3. Master-Slave-Funktion

Failover, Realisierung einer Lese-/Schreibtrennung, Bereitstellung einer Sicherung des Datenbankverwaltungssystems (DBSM) für Abfragedienste, Vermeidung von Geschäftsbeeinträchtigungen

4. Master-Slave-Replikationsprinzip

bin log: Binärprotokoll, zeichnet Schreibvorgänge auf (Hinzufügen, Löschen, Ändern und Abfragen)

Relaisprotokoll: Relaisprotokoll

  1. Die Masterdatenbank zeichnet alle Schreibvorgänge im Binlog-Protokoll auf, um einen Protokoll-Dump-Thread zu generieren, und übergibt das Binlog-Protokoll an den E/A-Thread der Slavedatenbank.
  2. Die Slave-Bibliothek hat zwei Threads:
    E/A-Threads
    SQL-Thread
  3. Der E/A-Thread der Slave-Bibliothek fordert die Master-Bibliothek auf, das Binlog-Protokoll abzurufen und in das Relay-Protokoll zu schreiben.
  4. Der SQL-Thread liest die Protokolle in der Relay-Protokolldatei und analysiert die spezifischen Vorgänge, um dieselben Vorgänge wie Master und Slave auszuführen und so Datenkonsistenz zu erreichen.

5. Master-Slave-Replikationskonfiguration (bei konsistenten Daten)

Schritt:

  • Stellen Sie sicher, dass die Daten in der Master-Datenbank mit denen in der Slave-Datenbank identisch sind
  • Erstellen Sie ein Synchronisierungskonto in der Masterdatenbank und autorisieren Sie es für die Verwendung durch die Slavedatenbank.
  • Konfigurieren Sie die Masterdatenbank (ändern Sie die Konfigurationsdatei).
  • Konfigurieren Sie die Slave-Datenbank (ändern Sie die Konfigurationsdatei)

Umweltanforderungen:

Zwei MySQL-Server, ein Master-Server (Schreibfunktion) und ein Slave-Server (Lesefunktion)

Hauptdatenbank (centos8) IP-Adresse: 192.168.136.145 centos8.0/mysql5.7 Gleiche Daten
Abschnitt 6: Die Daten sind nicht dieselben (vielleicht hat das Unternehmen schon Daten von früher)
Aus der Datenbank (centos8) IP-Adresse: 192.168.136.191 centos7.0/mysql5.7 gleiche Daten

5.1 Installieren Sie mysql5.7 jeweils auf dem Master- und Slave-Server

Das entsprechende Tutorial (super ausführlich) könnt ihr euch hier ansehen: https://www.jb51.net/article/221946.htm

#Binärinstallation: https://blog.csdn.net/qq_47945825/article/details/116848970?spm=1001.2014.3001.5501
#Oder aus einem Netzwerk-Repository installieren: (im Allgemeinen binäre Installation)
https://blog.csdn.net/qq_47945825/article/details/116245442?spm=1001.2014.3001.5501

5.2 Die Daten der Master-Datenbank stimmen mit denen der Slave-Datenbank überein

[root@mysql01 ~]# mysql -uroot -e 'Datenbanken anzeigen;'
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
+--------------------+
[root@mysql02 ~]# mysql -uroot -e 'Datenbanken anzeigen;'
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
+--------------------+

5.3 Erstellen Sie ein Synchronisierungskonto in der Masterdatenbank und autorisieren Sie es für die Verwendung durch die Slavedatenbank

Replikation: Replikations-Slave: von 192.168.136.191: von der Datenbank-IP-Adresse

mysql> Benutzer ‚vvv‘@‚192.168.136.191‘ erstellen, identifiziert durch ‚vvv0917‘;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> gewähre Replikations-Slave auf *.* an 'vvv'@'192.168.136.191';
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

5.4 Testen der Verbindung am Slave

[root@mysql02 ~]# mysql -uvvv -vvv0917 -h192.168.136.145
mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
+--------------------+
1 Zeile im Satz (0,00 Sek.)

5.5 Konfigurieren der Masterdatenbank

[root@mysql01 ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
Datenverzeichnis = /opt/data
Socket = /tmp/mysql.sock
Port = 3306
pid-Datei = /opt/data/mysql.pid
Benutzer = MySQL
Namensauflösung überspringen
log-bin=mysql_bin #Starte binlog log server-id=10 #Eindeutige Kennung des Datenbankservers, die ID muss kleiner sein als die der Slave-Datenbank #Starte den Dienst neu (für diese Neustartmethode muss die Datei mysqld.service konfiguriert sein)
[root@mysql01 ~]# systemctl starte mysqld neu
Beobachten Sie den Status der primären Datenbank:
mysql> Masterstatus anzeigen;
+------------------+----------+--------------+------------------+-------------------+
| Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000004 | 962 | | | |
+------------------+----------+--------------+------------------+---

5.6 Konfigurieren der Slave-Datenbank

[root@mysql02 ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql 
Datenverzeichnis = /opt/data 
Socket = /tmp/mysql.sock 
Port = 3307
Benutzer = MySQL
pid-Datei = /opt/data/mysql.pid
Namensauflösung überspringen
#Grant-Tabellen überspringen 
server-id=20 #Server-ID, größer als die primäre Datenbank-ID
relay-log=mysql_relay_log #Relay-Protokoll starten #log-bin=mysql-bin 
#Starten Sie den Dienst neu:
[root@mysql02 ~]# systemctl starte mysqld neu

5.7 Konfigurieren und Starten der Master-Slave-Replikationsfunktion (mysql02-Slave-Datenbank)

[root@slave02 ~]# mysql -uroot -p
mysql> ändere Master in
    -> master_host='192.168.136.145',
    -> master_user='vvv',
    -> Master-Passwort = 'vvv0917',
    -> master_log_file='mysql_bin.000004',
    -> master_log_pos=962;
Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,01 Sek.)
mysql> starte Slave; #stop Slave zum Herunterfahren. Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)
#Konfigurationsstatus anzeigen:
mysql> Slave-Status anzeigen\G; 
   Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
                  Master_Host: 192.168.136.145
                  Master_Benutzer: vvv
                  Master_Port: 3306
                Verbindungswiederholung: 60
              Master_Log_File: mysql_bin.000004
          Read_Master_Log_Pos: 962
               Relay-Log-Datei: mysql_relay_log.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql_bin.000004
             Slave_IO_Running: Ja
            Slave_SQL_Running: Ja
            #Hier muss beides auf „ja“ stehen, damit die Konfiguration erfolgreich ist, andernfalls schlägt sie fehl

5.8 Prüfung:

Hauptbibliothek:

mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
+--------------------+

Aus der Bibliothek:

mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
+--------------------+


Die Hauptbibliothek erstellt die Datenbank clq und fügt Daten hinzu:

mysql> Datenbank clq erstellen;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
mysql> Tabelle erstellen clq01(id int(11)nicht null Primärschlüssel auto_increment,Name varchar(100)nicht null,Alter tinyint(4)); 
mysql> füge clq01(Name, Alter) Werte('A',20),('B',21),('C',22) ein;
Abfrage OK, 3 Zeilen betroffen (0,00 Sek.)

Blick aus der Galerie:

mysql> wähle * aus clq01;
+----+------+------+s
| ID | Name | Alter |
+----+------+------s+
| 1 | EIN | 20 |
| 2 | B | 21 |
| 3 | C | 22 |
+----+------+------+
                              #Master-Slave-Replikation abgeschlossen!


6. Master-Slave-Konfiguration (bei inkonsistenten Daten)

6.1 Im Allgemeinen muss für eine vollständig gesicherte Masterdatenbank ein weiteres Terminal geöffnet werden, um der Datenbank eine Lesesperre hinzuzufügen (nur Lesen, nicht Schreiben).

Vermeiden Sie Unterschiede, die durch das Schreiben von Daten durch andere entstehen

Tabellen mit Lesesperre leeren:
beenden: Beenden zum Entsperren (Entsperren nach Abschluss der Sicherung)

6.2 Stellen Sie sicher, dass die Daten in der Master-Datenbank mit denen in der Slave-Datenbank identisch sind

#Bereiten Sie zuerst die Hauptdatenbank vor [root@mysql01 ~]# mysqldump -uroot -A > all-databases.sql 
#Daten in die Slave-Datenbank kopieren [root@mysql01 ~]# ls /clq
alle-datenbanken.sql
[root@mysql01 ~]# scp /clq/all-databases.sql [email protected]:/clq/
Die Authentizität des Hosts „192.168.136.193 (192.168.136.193)“ kann nicht festgestellt werden.
Der ECDSA-Schlüsselfingerabdruck ist SHA256:XIAQEoJ+M0vOHmCwQvhUdw12u5s2nvkN0A4TMKLaFiY.
Möchten Sie die Verbindung wirklich fortsetzen (ja/nein/[Fingerabdruck])ja
Passwort von [email protected]: 
all-databases.sql 100 % 853 KB 115,4 MB/s 00:00  
[root@mysql02 clq]# ll
Gesamtnutzung 896 #Ansicht aus der Datenbank -rw-r--r--. 1 root root 873266 17. Mai 19:36 all-databases.sql

6.3 Überprüfen Sie, welche Bibliotheken sich in der Master-Bibliothek auf der Slave-Bibliothek befinden, um die Konsistenz sicherzustellen

[root@mysql02 clq]# mysql -uroot -pHuawei0917@ < alle-datenbanken.sql 
mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein.
[root@mysql02 clq]# mysql -uroot -pHuawei0917@ -e 'Datenbanken anzeigen;'
mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein.
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|
|mysql |
| Leistungsschema |
|System|
+--------------------+
Hauptbibliothek:
mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|
|mysql |
| Leistungsschema |
|System|
+--------------------+


6.4 Stellen Sie sicher, dass die Konfigurationsdateien der beiden Bibliotheken mit den entsprechenden Dateien konfiguriert wurden

[root@mysql01 ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
Datenverzeichnis = /opt/data
Socket = /tmp/mysql.sock
Port = 3306
pid-Datei = /opt/data/mysql.pid
Benutzer = MySQL
Namensauflösung überspringen
log-bin=mysql_bin #Protokolldatei server-id=10 #eindeutige Kennung der Service-ID
[root@mysql02 ~]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql 
Datenverzeichnis = /opt/data 
Socket = /tmp/mysql.sock 
Port = 3307
Benutzer = MySQL
pid-Datei = /opt/data/mysql.pid
Namensauflösung überspringen
#Grant-Tabellen überspringen 
server-id=20 #Identifiziert eindeutig die Service-ID (größer als die Hauptdatenbank)
relay-log=mysql_relay_log #Relay-Protokoll#log-bin=mysql-bin 


Die Schritte danach sind genau die gleichen wie nach 5.5!

Zusammenfassung:

Wenn die Masterdatenbank die Daten ändert, ändern sich die Daten der Slavedatenbank entsprechend!
Im Gegenteil, wenn die Daten in der Slave-Datenbank geändert werden, ändern sich die Daten in der Master-Datenbank nicht.

Zeigen Sie den in der Datenbank ausgeführten Befehlsprozess an

mysql> Prozessliste anzeigen;
+----+------+----------------------+---------+-------------+------+-----------------------------------------------------------+------------------+
| ID | Benutzer | Host | db | Befehl | Zeit | Status | Info |
+----+------+----------------------+---------+-------------+------+-----------------------------------------------------------+------------------+
| 5 | repl | 192.168.136.219:39788 | NULL | Binlog-Dump | 1575 | Der Master hat das gesamte Binlog an den Slave gesendet; warte auf weitere Aktualisierungen | NULL |
| 7 | root | localhost | NULL | Abfrage | 0 | wird gestartet | Prozessliste anzeigen |
+----+------+----------------------+---------+-------------+------+-----------------------------------------------------------+------------------+
2 Zeilen im Satz (0,00 Sek.)

Oben finden Sie eine detaillierte Analyse des Prinzips und der Funktion der Master-Slave-Replikation von MySQL-Datenbanken. Weitere Informationen zur Master-Slave-Replikation von MySQL-Datenbanken finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Implementierungsschritte der MySQL-Master-Slave-Replikation
  • Prinzip und Anwendung der MySQL-Master-Slave-Synchronisation
  • Detaillierte Erläuterung der mysql5.6 Master-Slave-Einrichtung und asynchroner Probleme

<<:  Implementierungsbeispiel zum Schließen der Browserabmeldung in Vue

>>:  Detailliertes Beispiel zur Installation eines FastDfs-Dateiservers mit Docker Compose

Artikel empfehlen

Zusätzliche Anweisungen zur Verwendung von Gettern und Aktionen in Vuex

Vorbemerkungen 1.Unterschiede zwischen Vue2.x und...

mysql5.7 Installations- und Konfigurationstutorial unter Centos7.3

In diesem Artikel finden Sie das Installations- u...

Zehn nützliche und einfache MySQL-Funktionen

Funktion 0. Aktuelle Uhrzeit anzeigen Befehl: sel...

Vier Möglichkeiten zum Vergleichen von JavaScript-Objekten

Inhaltsverzeichnis Vorwort Referenzvergleich Manu...

CSS3 erzielt verschiedene Randeffekte

Durchscheinender Rand Ergebnis: Implementierungsc...

Tutorial zur grundlegenden Verwendung des MySQL Slow Query Log

Parameter im Zusammenhang mit dem langsamen Abfra...

Beispiele für ES6-Schleifen und iterierbare Objekte

Dieser Artikel untersucht die ES6-for...of-Schlei...