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

Detaillierte Analyse der MySQL MDL-Metadatensperre

Vorwort: Wenn Sie eine SQL-Anweisung in MySQL aus...

Ein Artikel zeigt Ihnen, wie Sie mit React ein Rezeptsystem implementieren

Inhaltsverzeichnis 1. Rezeptsammlung 1.1 Projekth...

So verwenden Sie Axios-Anfragen im Vue-Projekt

Inhaltsverzeichnis 1. Installation 2. Es gibt kei...

JavaScript zum Erzielen digitaler Uhreffekte

In diesem Artikelbeispiel wird der spezifische Co...

Tutorial zum Erstellen eines FTP-Servers in Ubuntu 16.04

Ubuntu 16.04 baut FTP-Server FTP installieren FTP...

Heute bin ich auf ein sehr seltsames Problem gestoßen und habe es selbst gelöst

...Es ist so, heute wollte ich ein Popup-Fenster m...

Stellen Sie einen Varnish-Cache-Proxyserver basierend auf Centos7 bereit

1. Lackübersicht 1. Einführung in Varnish Varnish...

17 404-Seiten, die Sie erleben möchten

Wie können wir sagen, dass wir 404 vermeiden soll...

Beispielcode zur Installation von ElasticSearch und Kibana unter Docker

1. Einleitung Elasticsearch erfreut sich derzeit ...

Einfache Implementierung zum Ausblenden der Bildlaufleiste in HTML

1. HTML-Tags mit Attributen XML/HTML-CodeInhalt i...

Details zur Bündelung statischer Ressourcen ohne JavaScript

Inhaltsverzeichnis 1. Benutzerdefinierter Import ...

Node erstellt schnell die Backend-Implementierungsschritte

1. Installieren Sie zuerst Node, Express und Expr...