Zusammenfassung der MySQL-Vollsicherung, Master-Slave-Replikation, kaskadierenden Replikation und Halbsynchronisierung

Zusammenfassung der MySQL-Vollsicherung, Master-Slave-Replikation, kaskadierenden Replikation und Halbsynchronisierung

MySQL-Vollsicherung

1. Aktivieren Sie das Binärprotokoll, trennen Sie es von der Datenbank und speichern Sie es separat

 vim /etc/meine.cnf

Hinzufügen zu

log_bin=/data/bin/mysql-bin

Erstellen Sie den Ordner /data/bin und autorisieren Sie ihn

chown mysql.mysql /data/bin

2. Vervollständigen Sie die Sicherungsdatenbank

mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz

3. Datenbank hinzufügen, löschen und ändern

 INSERT hellodb.students(Student,Name,Geschlecht,Alter) VALUE(27,'Lujunyi','M',30);

4. MySQL stoppen

 systemctl stop mariadb.service

5. Entpacken Sie die Sicherungsdatei

unxz /data/all.sql.xz

6. Suchen Sie den Speicherort des Binärprotokolls während der vollständigen Sicherung

vim /data/all.sql 
  HANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=468

7. Exportieren Sie das Binärprotokoll, nachdem die Sicherung abgeschlossen ist

mysqlbinlog --start-position=468 /data/bin/mysql-bin.000001 > /data/inc.sql

8. Daten wiederherstellen

mysql -e 'Quelle /data/all.sql'
mysql -e 'Quelle /data/inc.sql'

9. Überprüfung abgeschlossen.

Wiederherstellung nach versehentlichem Löschen

1. Binärprotokoll aktivieren und getrennt von der Datenbank speichern

vim /etc/meine.cnf

Hinzufügen zu

 log_bin=/data/bin/mysql-bin

Erstellen Sie den Ordner /data/bin und autorisieren Sie ihn

 chown mysql.mysql /data/bin

2. Führen Sie eine vollständige Sicherung der Datenbank durch

mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz

3. Datenbank hinzufügen, löschen und ändern

mysql -e "Tabelle hellodb.students löschen"
  mysql -e "füge hellodb.teachers-Wert ein (5,'wangqi',50,'M')"

4. Beenden Sie den Dienst

 systemctl stop mariadb.service

5. Löschen Sie die Datenbank

rm -rf /var/lib/mysql/*

6. Entpacken Sie die Sicherungsdatei

unxz /data/all.sql.xz

7. Sehen Sie sich die Sicherungsdatei an und suchen Sie den Binärknoten

 vim /data/all.sql
   -- ÄNDERN SIE MASTER IN MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=521902;

8. Exportieren Sie die binären Protokollknotendaten

mysqlbinlog --start-position=521902 /data/bin/mysql-bin.000004 >/data/inc.sql

9. Löschen Sie den Befehl, der den Fehler in den Binärprotokollknotendaten verursacht hat

 vim /data/inc.sql
  DROP TABLE `hellodb`.`students` /* vom Server generiert */

10. Starten Sie den Dienst

systemctl starte mariadb.service

11. Binäres Logging deaktivieren

mysql -e "SET sql_log_bin=off"

12. Backup-Daten importieren

 mysql </data/all.sql 
 mysql </data/inc.sql 

13.Überprüfung abgeschlossen.

Master-Slave-Replikation

# Primärer Server

1. Aktivieren Sie das Binär-Logging auf dem Master-Server und ändern Sie das Binärverzeichnis

 vim /etc/meine.cnf
  log_bin=/data/bin/mysql-bin
  binlog-format=Zeile
  Server-ID=1 (Master- und Slave-Server müssen unterschiedlich sein)

Verzeichnis wie oben ändern

2. Starten Sie den Dienst neu

Dienst MySQL Neustart

3. Erstellen Sie ein Konto, um Daten zu kopieren

mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIZIERT DURCH "centos"

4. Sehen Sie sich das vom Masterserver verwendete Binärprotokoll an

 Master-Protokolle anzeigen;
  +------------------+------------+
  | Protokollname | Dateigröße |
  +------------------+------------+
  |mysql-bin.000001 | 14383 |
  +------------------+------------+
  1 Zeile im Satz (0,00 Sek.)

# Vom Server

5. Weitere Konfiguration

 vim /etc/meine.cnf
  Server-ID = 2
  schreibgeschützt
  #log-bin=/data/bin/mysql-bin

6. Starten Sie den Dienst

Dienst MySQL Neustart

7. Den Hauptdienst zuordnen

 MariaDB [(keine)]>
 ÄNDERN SIE MASTER IN MASTER_HOST='172.22.7.70', MASTER_USER='repluser', MASTER_PASSWORD='centos', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=14383;

8. Überprüfen Sie den Status des Slave-Servers

Slave-Status anzeigen\G;

9. Starten Sie den Thread

Slave starten;

#prüfen

10. Fügen Sie Daten auf dem Master-Server hinzu, löschen und ändern Sie sie und prüfen Sie, ob die Daten auf dem Slave-Server synchronisiert sind.

Lösung für Master-Slave-Replikationsfehler - sql_slave_skip_counter

#Master-Dienst-IP=172.22.7.70

1. Aktivieren Sie das Binär-Logging auf dem Master-Server und ändern Sie das Binärverzeichnis

 vim /etc/meine.cnf
  log_bin=/data/bin/mysql-bin
  binlog-format=Zeile
  Server-ID=1 (Master- und Slave-Server müssen unterschiedlich sein)

Verzeichnis wie oben ändern

2. Starten Sie den Dienst neu

Dienst MySQL Neustart

3. Erstellen Sie ein Konto, um Daten zu kopieren

mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIZIERT DURCH "centos"

4. Sehen Sie sich das vom Masterserver verwendete Binärprotokoll an

 mysql -e 'Master-Protokolle anzeigen;'
  +------------------+------------+
  | Protokollname | Dateigröße |
  +------------------+------------+
  |mysql-bin.000001 | 264 |
  |mysql-bin.000002 | 245 |
  +------------------+------------+

#Slave-Dienst-IP=172.22.7.71

5. Ändern Sie die Konfigurationsdatei und starten Sie den Dienst

 vim /etc/meine.cnf
  [mysqld]
  Server-ID = 2
  schreibgeschützt
 systemctl starte mariadb

#Konfigurationsfehler Master-Dienstinformationen

6. Konfiguration, ändern Sie Master auf

 ÄNDERN SIE MASTER IN 
 MASTER_HOST='172.22.7.77', 
 MASTER_USER='wang',  
 MASTER_PASSWORD='lodman',
 MASTER_PORT=3306, 
 MASTER_LOG_FILE=log-bin.001', 
 MASTER_LOG_POS=4, 
 MASTER_CONNECT_RETRY=10;

7. Überprüfen Sie den Slave-Status

 mysql -e 'Slave-Status anzeigen\G'
  Slave_IO_State: 
    Master_Host: 172.22.7.77
    Master_Benutzer: wang
    Master_Port: 3306
   Verbindungswiederholung: 10
   Master_Log_File: log-bin.001
  Read_Master_Log_Pos: 4
   Relay_Log_Datei: ct7m1-relay-bin.000001
   Relay_Log_Pos: 4
 Relay_Master_Log_File: log-bin.001
   Slave_IO_Running: Nein
  Slave_SQL_Running: Nein

       ·········leicht

8. Starten Sie den Kopier-Thread

mysql -e 'Slave starten'

9. Überprüfen Sie den Slave-Status erneut

 mysql -e 'Slave-Status anzeigen\G'
  Slave_IO_State: 
    Master_Host: 172.22.7.77
    Master_Benutzer: wang
    Master_Port: 3306
   Verbindungswiederholung: 10
   Master_Log_File: log-bin.001
  Read_Master_Log_Pos: 4
   Relay_Log_Datei: ct7m1-relay-bin.000001
   Relay_Log_Pos: 4
 Relay_Master_Log_File: log-bin.001
   Slave_IO_Running: Verbindung wird hergestellt
  Slave_SQL_Running: Ja

       ·········leicht

10.Master-Dienst fügt Daten hinzu, löscht und ändert sie

11. Überprüfen Sie, ob der Slave-Dienst synchronisiert ist. Fehlgeschlagen!

#Lösen Sie den Fehler

12. Stoppen und setzen Sie den Slave-Replikationsthread-Dienst zurück

 mysql -e 'Slave stoppen'
 mysql -e 'Slave zurücksetzen'

13. Konfigurieren Sie den richtigen Änderungsmaster für Informationen

 ÄNDERN SIE MASTER IN MASTER_HOST='172.22.7.70',
 MASTER_USER='repluser',
 MASTER_PASSWORD='centos',
 MASTER_PORT=3306,
 MASTER_LOG_FILE='mysql-bin.000002',
 MASTER_LOG_POS=245;

14. Überprüfen Sie den Slave-Status

Slave-Status anzeigen\G;
   Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
    Master_Host: 172.22.7.70
    Master_Benutzer: repluser
    Master_Port: 3306
   Verbindungswiederholung: 10
   Master_Log_File:mysql-bin.000002
  Read_Master_Log_Pos: 7382
   Relay_Log_Datei: ct7m1-relay-bin.000002
   Relay_Log_Pos: 540
 Relay_Master_Log_File: mysql-bin.000002
   Slave_IO_Running: Ja
  Slave_SQL_Running: Nein

15. Im Slave-Status wurde Slave_SQL_Running: No gefunden. Führen Sie den folgenden Befehl aus, um es in YES zu ändern.

 MariaDB [(keine)]> Slave stoppen;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

MariaDB [(keine)]> setze GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

MariaDB [(keine)]> Slave starten;
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)

MariaDB [(keine)]> Slave-Status anzeigen\G;
*************************** 1. Reihe ***************************
   Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
    Master_Host: 172.22.7.70
    Master_Benutzer: repluser
    Master_Port: 3306
    Verbindungswiederholung: 10
   Master_Log_File:mysql-bin.000002
  Read_Master_Log_Pos: 7382
   Relay_Log_Datei: ct7m1-relay-bin.000003
    Relay_Log_Pos: 540
  Relay_Master_Log_File: mysql-bin.000002
   Slave_IO_Running: Ja
   Slave_SQL_Running: Ja
        ·········leicht

16. Überprüfen Sie, ob die Slave-Dienstdaten synchronisiert sind

17. Synchronisierung abgeschlossen.

Kaskadierende MySQL-Replikation

In der Produktion gibt es eine Master-Slave-Replikationsmethode, bei der der Masterknoten zuerst die Daten mit einem Zwischen-Slaveknoten synchronisiert und der Slaveknoten dann die Daten auf nachfolgende Slaveknoten kopiert. Diese Replikationsmethode wird als kaskadierende Replikation bezeichnet.

Der Vorteil der kaskadierenden Replikation besteht darin, dass sie den Druck auf den primären Knoten erheblich reduzieren kann.

Für die kaskadierende Replikation muss bei der Konfiguration die Option log_slave_updates auf den Zwischenknoten aktiviert werden.

#Umgebung Server Master Slave Slave
 System Centos7 Centos7 Centos7
 IP 172.22.7.70 172.22.7.70 172.22.7.71

#Matte

1. Aktivieren Sie das Binär-Logging auf dem Master-Server und ändern Sie das Binärverzeichnis

 vim /etc/meine.cnf
  log_bin=/data/bin/mysql-bin
  binlog-format=Zeile
  Server-ID=1 (Master- und Slave-Server müssen unterschiedlich sein)

Verzeichnis wie oben ändern

2. Starten Sie den Dienst neu

Dienst MySQL Neustart

3. Erstellen Sie ein Konto, um Daten zu kopieren

mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIZIERT DURCH "centos"

4. Sehen Sie sich das vom Masterserver verwendete Binärprotokoll an

 mysql -e 'Master-Protokolle anzeigen;'
  +------------------+------------+
  | Protokollname | Dateigröße |
  +------------------+------------+
  |mysql-bin.000001 | 264 |
  |mysql-bin.000002 | 7488 |
  | mysql-bin.000003 | 402 |
  +------------------+------------+

 
#Sklave

5. Ändern Sie die Konfigurationsdatei und erstellen Sie ein Binärprotokollverzeichnis

 vim /etc/meine.cnf
  [mysqld]
  log-bin=/data/bin/mysql-bin
  binlog-format=Zeile
  schreibgeschützt
  log_slave_updates
  Server-ID = 2

Verzeichnis wechseln siehe oben

6. Starten Sie den Dienst

 systemctl Neustart MariaDB

7. Konfigurieren Sie den Änderungsmaster auf Informationen

 ÄNDERN SIE MASTER IN MASTER_HOST='172.22.7.70',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=402;

8. Starten Sie den Slave-Thread

 mysql -e 'Slave starten'

9. Überprüfen Sie den Slave-Status

 Slave-Status anzeigen\G;
 *************************** 1. Reihe ***************************
   Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
    Master_Host: 172.22.7.70
    Master_Benutzer: repluser
    Master_Port: 3306
   Verbindungswiederholung: 60
   Master_Log_File: mysql-bin.000003
  Read_Master_Log_Pos: 7539
   Relay_Log_Datei: ct7m1-relay-bin.000002
   Relay_Log_Pos: 7677
 Relay_Master_Log_File: mysql-bin.000003
   Slave_IO_Running: Ja
  Slave_SQL_Running: Ja
   Replicate_Do_DB:

10. Hinzufügen, Löschen und Ändern von Daten auf dem Master zum Testen und Anzeigen

#Sklave1

11. Kopieren Sie die Daten vom Slave auf den Slave

 mysqldump -A --single-transaction -F --master-data=1 > /data/all.sql
 scp /data/all.sql 172.22.7.72:/data

12. Slave erstellt ein Konto zum Kopieren von Daten

 mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIZIERT DURCH "centos"

13. Ändern Sie die Slave1-Konfiguration

 vim /etc/meine.cnf
  [mysqld]
  schreibgeschützt
  Server-ID = 3

14. Starten Sie den Dienst

 systemctl starte mariadb

15. Zeigen Sie das Binärprotokoll des Slave-Servers an

 mysql -e 'Master-Protokolle anzeigen'
  +------------------+------------+
  | Protokollname | Dateigröße |
  +------------------+------------+
  |mysql-bin.000001 | 351 |
  |mysql-bin.000002 | 351 |
  |mysql-bin.000003 | 351 |
  |mysql-bin.000004 | 25552 |
  |mysql-bin.000005 | 586 |
  +------------------+------------+

16. Öffnen Sie die Datei all.sql und ändern Sie den Änderungsmaster in Informationen

 ÄNDERN SIE MASTER IN MASTER_HOST='172.22.7.71',MASTER_USER='repluser',MASTER _PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=586;  

17. Slave-Daten importieren

mysql < /data/all.sql

18. Starten Sie den Thread

 mysql -e "SLAVE STARTEN;"

19. Überprüfen Sie den Slave-Status

mysql -e "Slave-Status anzeigen\G;"

20. Fügen Sie das Masterobjekt hinzu, löschen und ändern Sie es, um zu überprüfen, ob es synchronisiert ist

21. Synchronisierung abgeschlossen.

MySQL halbsynchron

Asynchrone Replikation bedeutet, dass beim Schreiben eines Datensatzes durch einen Benutzer die Daten zuerst auf den Masterknoten geschrieben werden, dann eine erfolgreiche Schreibmeldung an den Benutzer gesendet wird und die Daten dann langsam auf andere Slaveknoten dahinter kopiert werden. Der Vorteil davon ist, dass die Effizienz relativ hoch ist, aber der Nachteil ist auch sehr offensichtlich. Die Verzögerung zwischen dem Masterserver und dem Slaveserver ist zu groß und der Masterserver fällt plötzlich aus, was zu Datenverlust führt.

Synchrone Replikation bedeutet, dass, wenn ein Benutzer einen Datensatz schreibt, der Masterknoten die Daten in die Datenbank schreibt und sie dann auf andere Slaveknoten dahinter kopiert. Wenn alle Slaveknoten eine Meldung zurückgeben, dass die Daten erfolgreich kopiert wurden, antwortet der Masterknoten dem Benutzer, dass auf die Daten erfolgreich zugegriffen wurde. Dies hat den Vorteil, dass die Datensicherheit gewährleistet ist, allerdings auf Kosten der Effizienz.

Die halbsynchrone Replikation ist eine Replikationsmethode zwischen synchroner und asynchroner Replikation. Ihr Funktionsprinzip ist: Wenn der Benutzer einen Schreibvorgang ausführt, sendet der Masterknoten die Daten an andere Slaveknoten dahinter. Solange ein Slaveknoten eine Nachricht über eine erfolgreiche Replikation zurückgibt, gibt der Masterknoten direkt einen erfolgreichen Schreibvorgang zurück. Wenn der Slaveknoten hinter dem Masterknoten keine Nachricht über eine erfolgreiche Replikation zurückgibt, tritt eine Zeitüberschreitung ein. Sobald die Zeitüberschreitung erreicht ist, gibt der Masterknoten zunächst eine Nachricht zurück, um dem Benutzer mitzuteilen, dass die Replikation erfolgreich war, und fährt dann mit der Replikation der Daten an den Slaveknoten fort.

#Konfigurieren Sie die Master-Slave-Replikation. Die Schritte finden Sie oben.

#Halbsynchronisierung konfigurieren

##Master

1. Ändern Sie die Konfigurationsdatei, um das Plug-In zu aktivieren

 vim /etc/meine.cnf
  [mysqld]
  log-bin=/data/bin/mariadb-bin
  binlog-format=Zeile
  Server-ID = 1
  rpl_semi_sync_master_aktiviert 

2. Starten Sie den Dienst neu.

 systemctl Neustart MariaDB

3. Prüfen Sie, ob das Plug-In gestartet ist

 GLOBALE VARIABLEN WIE „%semi%“ ANZEIGEN;
  +------------------------------------+--------+
  | Variablenname | Wert |
  +------------------------------------+--------+
  | rpl_semi_sync_master_enabled | EIN |
  | rpl_semi_sync_master_timeout | 3000 |
  | rpl_semi_sync_master_trace_level | 32 |
  | rpl_semi_sync_master_wait_no_slave | EIN |
  +------------------------------------+--------+
  4 Zeilen im Satz (0,00 Sek.)

4. Legen Sie die Timeout-Periode fest

 GLOBAL festlegen rpl_semi_sync_master_timeout=3000;
 Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

##Sklave

5. Ändern Sie die Konfigurationsdatei, um das Plug-In zu aktivieren

 vim /etc/meine.cnf
  [mysqld]
  log-bin=/data/bin/mariadb-bin
  binlog-format=Zeile
  Server-ID = 2
  rpl_semi_sync_master_aktiviert

6. Starten Sie den Dienst neu.

systemctl Neustart MariaDB

7. Prüfen Sie, ob das Plug-In gestartet ist

 GLOBALE VARIABLEN WIE „%semi%“ ANZEIGEN;
  +------------------------------------+--------------+
  | Variablenname | Wert |
  +------------------------------------+--------------+
  | rpl_semi_sync_master_enabled | EIN |
  | rpl_semi_sync_master_timeout | 1000 |
  | rpl_semi_sync_master_trace_level | 32 |
  | rpl_semi_sync_master_wait_no_slave | EIN |
  | rpl_semi_sync_master_wait_point | AFTER_COMMIT |
  +------------------------------------+--------------+
  5 Zeilen im Satz (0,00 Sek.)

8. Starten Sie den Kopier-Thread

mysql -e "SLAVE STARTEN";

9. Prüfung und Inspektion

10. Synchronisation abgeschlossen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Konfiguration und Einführung des MySQL-Halbsynchron-Replikationsprinzips
  • Ein kurzer Vortrag über die halbsynchrone MySQL-Replikation
  • Prinzip und Fehlerbehebung der halbsynchronen MySQL-Replikation
  • Detaillierte Analyse der halbsynchronen und asynchronen MySQL Master-Slave-Replikationskonfiguration
  • Detaillierte Erklärung der MySQL-Halbsynchronisierung

<<:  Detaillierte Schritte zur Implementierung der Excel-Importfunktion in Vue

>>:  Detailliertes Tutorial zur Installation von Centos8 auf VMware

Artikel empfehlen

11 Möglichkeiten, Duplikate aus JS-Arrays zu entfernen

Bei der tatsächlichen Arbeit oder bei Interviews ...

Iframe-Parameter mit Anweisungen und Beispielen

<iframe src=”test.jsp” Breite=”100″ Höhe=”50″ ...

So erstellen Sie mit Harbor ein privates Docker-Repository

Inhaltsverzeichnis 1. Open-Source-Lagerverwaltung...

Gängige Reparaturmethoden für die Trennung der MySQL Master-Slave-Replikation

Inhaltsverzeichnis 01 Problembeschreibung 02 Lösu...

Beispiel für die Installation von Kong Gateway in Docker

1. Erstellen Sie ein Docker-Netzwerk Docker-Netzw...

MySQL 5.7.20 Green Edition Installation Detailliertes grafisches Tutorial

Lassen Sie uns zunächst verstehen, was MySQL ist....

Implementierung der MySQL-Datensortierung (aufsteigend und absteigend)

Datensortierung aufsteigend, absteigend 1. Sortie...

Beispiele für die Verwendung von Docker und Docker-Compose

Docker ist eine Open-Source-Container-Engine, mit...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.18

In diesem Artikel wird das grafische Tutorial zur...

So erstellen Sie geplante Aufgaben mit dem Crond-Tool in Linux

Vorwort Crond ist ein Tool zur geplanten Ausführu...