So implementieren Sie eine bidirektionale MySQL-Sicherung

So implementieren Sie eine bidirektionale MySQL-Sicherung

Die bidirektionale MySQL-Sicherung wird auch als Master-Master-Sicherung bezeichnet, d. h. beide MySQL-Dienste sind Master und jeder Dienst ist ein Slave des anderen Dienstes.

Vorbereiten

Server

MySQL-Server Version IP-Adresse
masterA 5.6.41 192.168.1.201
masterB 5.6.41 192.168.1.202

Hinweis: Die gesicherte MySQL-Serverversion sollte konsistent gehalten werden, da verschiedene Versionen möglicherweise inkompatible Binärprotokollformate haben.

Spezifische Operationen

Beachten

Achten Sie während des Betriebs auf die Konsistenz der Daten auf beiden Seiten! ! !

MasterA-Konfiguration

meine.cnf

[mysqld]
# Eindeutige Serverkennung Server-ID = 1
# Name der binären Protokolldatei log-bin=mysql-bin

# Datenbanken, die gesichert werden müssen, mehrere Datenbanken werden durch getrennt, binlog-do-db=piumnl
# Datenbanken, die repliziert werden müssen, mehrere Datenbanken werden durch replicate-do-db=piumnl getrennt
# Name der Relay-Protokolldatei relay_log=mysqld-relay-bin
# Starten Sie den Synchronisierungsdienst manuell, um eine durch plötzliche Ausfallzeiten verursachte Asynchronisierung des Datenprotokolls zu vermeiden. skip-slave-start=ON
# Für gegenseitigen Master-Slave müssen Sie diese Zeile log-slave-updates=ON hinzufügen
# Deaktivieren Sie symbolische Links, um Sicherheitsrisiken vorzubeugen. Sie müssen symbolic-links=0 nicht hinzufügen.

# Optional# resolve - [Warnung] Slave SQL: Bei einem Absturz garantiert diese Konfiguration nicht, dass die Relay-Log-Informationen konsistent sind, Fehlercode: 0
Master-Info-Repository = Tabelle
relay-log-info-repository=Tabelle
Relay-Log-Wiederherstellung = 1

#Optional# Durch das Deaktivieren der DNS-Auflösung wird der bei der Autorisierung verwendete Domänenname ungültig. skip-host-cache
Namensauflösung überspringen

sql_mode=KEIN_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

MasterB-Konfiguration

meine.cnf

# Nicht mehr jedes Konfigurationselement erklären [mysqld]
Server-ID = 2
log-bin=mysql-bin

binlog-do-db=piumnl
replizieren-do-db=piumnl
relay_log=mysql-relay-bin
skip-slave-start=EIN
log-slave-updates=EIN
symbolische Links = 0

# resolve - [Warnung] Slave SQL: Bei einem Absturz garantiert diese Konfiguration nicht, dass die Relay-Log-Informationen konsistent sind, Fehlercode: 0
Master-Info-Repository = Tabelle
relay-log-info-repository=Tabelle
Relay-Log-Wiederherstellung = 1

Host-Cache überspringen
Namensauflösung überspringen

sql_mode=KEIN_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Erstellen eines Backup-Benutzers

Sowohl MasterA als auch MasterB müssen einen Backup-Benutzer erstellen:

create user 'rep'@'%' identified by 'rep'; # Ein Konto erstellen grant replication slave on *.* to 'rep'@'%'; # Dem Konto Master-Slave-Backup-Berechtigungen für alle Tabellen in allen Datenbanken erteilen

Bemerkung:

  1. MySQL unter Linux deaktiviert die Berechtigung „grant_priv“ für den Benutzer „root@%“, sodass die Autorisierung fehlschlägt, wenn Sie sich remote anmelden.
  2. Das Backup-Benutzerkonto und das Passwort können hier inkonsistent sein. Um den Vorgang zu vereinfachen, werden hier das gleiche Konto und Passwort verwendet.

Starten Sie den Server neu

Starten Sie den Server neu

Sicherung aktivieren

masterA

Überprüfen Sie den Status von MasterB

Masterstatus anzeigen\G;
# Hier müssen Sie auf die Datei- und Positionswerte achten

Sicherung aktivieren

Sklave stoppen;

# master_log_file ist der Dateiwert des ersten Schrittvorgangs. # master_log_pos ist der Positionswert des ersten Schrittvorgangs. Ändere Master in master_host=<master_hostname>, master_user=<rep_username>, master_port=<master_port>, master_password=<rep_password>, master_log_file='mysql-log.000003', master_log_pos=154;
Slave starten;

Ergebnisse anzeigen

Slave-Status anzeigen\G;
# Überprüfen Sie die beiden wichtigsten Punkte. Beide müssen Ja sein. Wenn einer Nein ist, überprüfen Sie die Fehlerprotokolldatei, um festzustellen, wo das Problem liegt. # Slave_IO_Running: Ja
# Slave_SQL_Running: Ja

masterB

Wiederholen Sie den Vorgang von MasterA in umgekehrter Reihenfolge.

prüfen

Fügen Sie Daten jeweils in MasterA und MasterB ein und prüfen Sie, ob der andere Server die erwarteten Daten rechtzeitig hat.

Frage

MySQL-Slave konnte das Relay-Protokoll nicht öffnen

Dies sollte ein Problem mit dem Relay-Protokoll sein. Sie können die folgenden Vorgänge versuchen

Sklave stoppen;
Protokolle spülen;
Slave starten;

Beim Lesen der Daten aus dem Binärprotokoll ist vom Master ein schwerwiegender Fehler 1236 aufgetreten.

Beim Abrufen der Protokolle aus der Hauptdatenbank wurde festgestellt, dass die erste Datei in der Datei mysql_bin.index der Hauptdatenbank nicht vorhanden war.

# Führen Sie zum Zurücksetzen die folgenden Vorgänge aus. # Wenn das Binärprotokoll oder das Relay-Protokoll andere Funktionen hat, führen Sie die folgenden Vorgänge nicht aus, um den Master zurückzusetzen.
Slave zurücksetzen;
Protokolle spülen;

<Datenbank>.<Tabelle>

Die Verwendung von <Datenbank>.<Tabelle> für Einfüge-, Aktualisierungs- und Löschvorgänge wird nicht gesichert (das ist eine große Falle)! ! !

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:
  • So implementieren Sie eine bidirektionale synchrone MySQL-Sicherung unter Windows

<<:  Implementierung eines einfachen Gobang-Spiels mit nativem JavaScript

>>:  Detaillierte Installation und Verwendung von Docker-Compose

Artikel empfehlen

Rückblick auf die besten Webdesign-Arbeiten 2012 [Teil 1]

Zum Beginn des neuen Jahres möchte ich meinen Fre...

Detaillierte Erklärung der Verwendung von publicPath in Webpack

Inhaltsverzeichnis Ausgabe Ausgabepfad Ausgabe.öf...

Diagramm zur Installation von MySQL 5.6 unter Windows 7

Inhaltsverzeichnis 1. Herunterladen 2. Installati...

MySQL Best Practices: Grundlegende Arten von Partitionstabellen

Übersicht über partitionierte MySQL-Tabellen Da M...

Detaillierte Erklärung der HTML-Dokumenttypen

Meines ist: <!DOCTYPE html> Blog-Garten: &l...

Einige Vorschläge zur Linux-Systemoptimierung (Kerneloptimierung)

Swap deaktivieren Wenn auf dem Server ein Datenba...

Was ich beim Aufbau meines eigenen Blogs gelernt habe

<br />In einem Jahr Bloggen habe ich persönl...

Warum MySQL das Löschen von Daten nicht empfiehlt

Inhaltsverzeichnis Vorwort InnoDB-Speicherarchite...

Über die praktische Anwendung von HTML-Mailto (E-Mail) sprechen

Wie wir alle wissen, ist „mailto“ ein sehr praktis...

Detailliertes Installationstutorial für mysql-8.0.11-winx64.zip

Laden Sie das ZIP-Installationspaket herunter: Do...

So bedienen Sie das Kontrollkästchen auf einer HTML-Seite

Kontrollkästchen sind auf Webseiten sehr verbreit...

Nginx-Signalsteuerung

Einführung in Nginx Nginx ist ein leistungsstarke...