Master-Slave-Synchronisationskonfiguration der Mysql-Datenbank

Master-Slave-Synchronisationskonfiguration der Mysql-Datenbank

Mysql Master-Slave-Synchronisierungskonfiguration

Konfigurationsvorbereitung:

  • Es werden zwei Datenbanken benötigt
  • mysql Visualisierungstool, natürlich können Sie auch die Befehlszeile verwenden
  • Hier zeige ich, wie man Docker verwendet, um zwei MySQL-Container zu starten. Sie können auch zwei MySQL-Container installieren, solange die Versionen gleich sind.

1. Installieren Sie zwei MySQL

  • Erstellen Sie das msyql-Mount-Verzeichnis
[root@localhost /]# mkdir -p /opt/docker/mysql1/conf/
[root@localhost /]# mkdir -p /opt/docker/mysql1/logs/
[root@localhost /]# mkdir -p /opt/docker/mysql1/data/
  • Starten Sie das erste MySQL und mounten Sie den entsprechenden Dateiverzeichnis-Port: 6894
[root@localhost /]# docker run -d -p 6894:3306 --name mysql1 \
                    -v /opt/docker/mysql1/conf:/etc/mysql/ \
                    -v /opt/docker/mysql1/logs:/logs \
                    -v /opt/docker/mysql1/data:/var/lib/mysql \
                    --privilegiert=true \
                    -e MYSQL_ROOT_PASSWORD=qtykGhC29eP4Smpmysql:5.7
  • Durch Kopieren der zweiten MySQL

Bitte beachten Sie, dass sich im Verzeichnis /opt/docker/mysql2/data/auto.cnf des kopierten MySQL eine Datei auth.cnf befindet, die gelöscht werden muss.

[root@localhost Docker]# cp -r /opt/docker/mysql1/ /opt/docker/mysql2/
  • Löschen Sie die Datei auth.cnf
[root@localhost Docker]# rm -f /opt/docker/mysql2/data/auto.cnf
  • Starten Sie das zweite MySQL
[root@localhost docker]# docker run -d -p 6895:3306 --name mysql2 \
                    -v /opt/docker/mysql2/conf:/etc/mysql/ \
                    -v /opt/docker/mysql2/logs:/logs \
                    -v /opt/docker/mysql2/data:/var/lib/mysql \
                    --privilegiert=true \
                    -e MYSQL_ROOT_PASSWORD=qtykGhC29eP4Smpmysql:5.7

2. Schreiben Sie die MySQL-Konfigurationsdatei

  • Hauptbibliothek my.cnf-Datei
[root@localhost Docker]# vim /opt/docker/mysql1/conf/my.cnf
  • Inhalt der Datei my.cnf
[mysqld]
# Konfiguration der Masterdatenbank server-id=1 # Eindeutigkeit der Service-ID log-bin=mysql1-log # Binärlog aktivieren binlog-format=ROW # Logging-Modus replicate-do-db=db_docker # Name der zu replizierenden Daten # replicate-ignore-db=db_docker # Name der Daten, die nicht repliziert werden müssen
  • Aus der Bibliothek my.cnf-Datei
[root@localhost Docker]# vim /opt/docker/mysql2/conf/my.cnf
  • Inhalt der Datei my.cnf
[mysqld]
# Aus der Bibliothek konfigurieren server-id=2 # Eindeutigkeit der Service-ID log-bin=mysql2-log # Binärprotokoll aktivieren binlog-format=ROW # Protokollierungsmodus binlog-do-db=db_docker # Name der zu kopierenden Daten # binlog-ignore-db=db_docker # Name der Daten, die nicht kopiert werden müssen
  • Starten Sie den Docker-MySQL-Container neu
[root@localhost docker]# docker restart mysql1
[root@localhost docker]# docker restart mysql2

3. Daten initialisieren

  • Die beiden MySQLs führen die folgenden SQL-Anweisungen aus, um die Datenbank und die Tabelle zu erstellen
- Erstellen Sie eine Datenbank CREATE DATABASE `db_docker`;
VERWENDEN Sie db_docker;
-- Tabelle erstellen CREATE TABLE `t_docker` (
    `id` INT ( 11 ) NICHT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) DEFAULT NULL,
     PRIMÄRSCHLÜSSEL ( `id` )
) ENGINE = INNODB AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8;

Sehen Sie sich das Binärprotokoll der Hauptbibliothek an:

  • Die Hauptbibliothek führt den folgenden Befehl aus, um die Statusinformationen der Binärprotokolldatei auszugeben
mysql> MASTER-STATUS ANZEIGEN;
+------------------+----------+--------------+------------------+-------------------+
| Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 2223 | | | |
+------------------+----------+--------------+------------------+-------------------+

Konfigurieren des Slave-Binärprotokolls

  • Der Slave ändert die Parameter, die für die Verbindung mit dem Replikationsmaster verwendet werden, liest das Binärprotokoll des Masters und liest das Relay-Protokoll des Slaves.
ÄNDERN SIE MASTER IN
MASTER_HOST="192.168.101.59", # Hostadresse Ihre Hauptserver-IP
Master_Port=6894, # Port MASTER_USER="root", # Konto MASTER_PASSWORD="qtykGhC29eP4Smp", # Passwort MASTER_LOG_FILE="mysql-bin.000001", # Der Name der Binärdatei der Hauptbibliothek wird entsprechend der tatsächlichen Situation ausgefüllt MASTER_LOG_POS=377; # Die Position der Binärdatei der Hauptbibliothek wird entsprechend der tatsächlichen Situation ausgefüllt
  • Ausführen aus der Bibliothek, um die Replikation zu starten
mysql> START SLAVE;

Statusinformationen zu den grundlegenden Parametern der Slave-Bibliotheks-Threads. Verwenden Sie ab MySQL 8.0.22 SHOW REPLICA STATUS anstelle des veralteten SHOW SLAVE STATUS. Verwenden Sie in Versionen vor MySQL 8.0.22 SHOW SLAVE STATUS . Diese Anweisung erfordert das Privileg REPLICATION CLIENT (oder das veraltete Privileg SUPER).

Wenn die folgenden beiden Parameter „Ja“ lauten, bedeutet dies, dass die Konfiguration erfolgreich war, andernfalls liegt ein Problem mit der Konfiguration vor. Slave_IO_Running: Ja Slave_SQL_Running: Ja

Wenn einer der beiden oben genannten Parameter nicht Nein ist, liegt ein Fehler vor. Bitte überprüfen Sie diese beiden Felder Last_Errno Last_Error

Der Fehlerinhalt wird im Feld Last_Error aufgezeichnet und entsprechend dem Fehlerinhalt geändert.

mysql> SLAVE-STATUS ANZEIGEN \G;
*************************** 1. Reihe ***************************
               Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
                  Master_Host: 192.168.101.59
                  Master_Benutzer: root
                  Master_Port: 6894
                Verbindungswiederholung: 60
              Master_Log_File:mysql-bin.000001
          Read_Master_Log_Pos: 2223
               Relay_Log_File: 98394ee2fb48-relay-bin.000004
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Ja
            Slave_SQL_Running: Ja
              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: 2223
              Relay_Log_Space: 534
              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: 
        Sekunden_Hinter_Master: 0
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: 1
                  Master_UUID: aa58ab20-f500-11eb-aa65-0242ac110002
             Master_Info_Datei: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave hat alle Relay-Logs gelesen; wartet auf weitere Updates
           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: 
                Auto_Position: 0
         DB replizieren_neu schreiben: 
                 Kanalname: 
           Master_TLS_Version:

4. Andere MySQL-bezogene Befehle

  • Stoppen Sie den Datenaktualisierungsvorgang der Hauptdatenbank
mysql>Tabellen mit Lesesperre leeren;
  • Entsperren Sie die Hauptdatenbank
mysql>Tabellen entsperren;
  • Führen Sie es aus der Datenbank aus und stoppen Sie die Replikation. Wenn das Binärprotokoll der Slave-Datenbankkonfiguration fehlschlägt, müssen Sie die Replikation stoppen oder zurücksetzen, neu konfigurieren und dann die Replikation starten.
mysql> SLAVE STOPPEN;
  • Ausführen aus der Bibliothek, um die Replikation zurückzusetzen
mysql> SLAVE ZURÜCKSETZEN;

MySQL-Notizen

  • Die Befehle und Konfigurationsdateien für verschiedene Versionen können unterschiedlich sein
  • Die Demonstration verwendet MySQL 5.7
  • Wenn der Befehl oder die Konfiguration nicht funktioniert, besuchen Sie bitte die offizielle Website
  • Versuchen Sie in tatsächlichen Anwendungen, den Standardport 3306 nicht zu verwenden, da dieser anfällig für Angriffe ist.

MySQL-Container:

Betreten des Containers

docker exec -it mysql2 /bin/sh
#mysql2 Containername kann auch Container-ID sein

Melden Sie sich bei MySQL an

mysql -u root -pqtykGhC29eP4Smp
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 9
Serverversion: 5.7.35-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>

Erläuterung der my.cnf-Konfiguration

[mysqld]
# Konfiguration der Hauptdatenbank # Geben Sie eine eindeutige Server-ID an. Sie kann 0 sein, wird vom Server jedoch abgelehnt, der gültige Wert liegt also zwischen 1 und 4294967295. Standardwert 1
# Offizielle Website https://dev.mysql.com/doc/refman/5.7/en/replication-options.html
Server-ID = 1
# Binäres Logging aktivieren. Der Name der Binärdatei kann ein Pfad sein, zum Beispiel: /logs/mysql/log. Sie müssen dem Verzeichnis jedoch Dateiberechtigungen erteilen, da MySQL sonst keine Schreibberechtigung hat, was zu einem Fehler führt.
log-bin=mysql1-log
# Es gibt drei Protokollierungsmodi. # STATEMENT bewirkt, dass die Protokollierung anweisungsbasiert erfolgt.
# ROW bewirkt, dass die Protokollierung zeilenbasiert erfolgt. Dies ist die Standardeinstellung.
# MIXED bewirkt, dass die Protokollierung das gemischte Format verwendet. Zwischen den ersten beiden Modi# Offizielle Website https://dev.mysql.com/doc/refman/5.7/en/binary-log-setting.html
binlog-format=ROW 
# Der Name der zu kopierenden Datenbank. Um mehrere Datenbanken anzugeben, müssen Sie diese Option mehrfach verwenden.
# Da Datenbanknamen Kommas enthalten können, wird die Liste als Name einer einzelnen Datenbank behandelt, wenn Sie eine durch Kommas getrennte Liste angeben.
# Mehrere Instanzen:
# replizieren-do-db=db_docker1 
# replizieren-do-db=db_docker2 
replizieren-do-db=db_docker 
#Datenname, der nicht repliziert werden muss. Gleiche Konfiguration wie oben # replicate-ignore-db=db_docker #Datenname, der nicht repliziert werden muss

[mysqld]
# Die Konfiguration der Slave-Datenbank ist die gleiche wie oben. server-id=2 # Eindeutigkeit der Service-ID log-bin=mysql2-log # Binärprotokoll öffnen binlog-format=ROW # Protokollierungsmodus binlog-do-db=db_docker # Name der zu kopierenden Daten # binlog-ignore-db=db_docker # Name der Daten, die nicht kopiert werden müssen

auth.cnf-Datei

Dateiinhalt Server-UUID

  • Auch hier muss die UUID eindeutig sein und wird beim Start automatisch generiert. Wenn Sie die Datenbank auch durch Kopieren des MySQL-Datenverzeichnisses erstellt haben, müssen Sie die Datei löschen
[Auto]
server-uuid=aa58ab20-f500-11eb-aa65-0242ac110002
  • Wenn die UUID gleich ist, wird der folgende Fehler gemeldet
Schwerwiegender Fehler: Der Slave-E/A-Thread wird angehalten, da Master und Slave über dieselben MySQL-Server-UUIDs verfügen. Damit die Replikation funktioniert, müssen diese UUIDs unterschiedlich sein.

Offizielle Website zur Binärprotokollkonfiguration: https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html

Dies ist das Ende dieses Artikels über die Details der MySQL-Master-Slave-Synchronisierungskonfiguration. Weitere relevante Inhalte zur MySQL-Master-Slave-Synchronisierungskonfiguration finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Implementierungsschritte für die Master-Slave-Synchronisierungseinstellungen der MySQL-Datenbank
  • MySQL Master-Slave-Replikation, halbsynchrone Replikation
  • Prinzip und Anwendung der MySQL-Master-Slave-Synchronisation
  • Dieser Artikel zeigt Ihnen das Prinzip der MySQL Master-Slave-Synchronisation
  • MySQL erstellt eine Master-Slave-Synchronisation zur Implementierung von Operationen

<<:  Details zum JavaScript-Prototyp

>>:  Detaillierter Prozess für den Einstieg mit Docker Compose HelloWorld

Artikel empfehlen

So erstellen Sie mit Squid einen Proxyserver für http und https

Als wir nginx eingeführt haben, haben wir nginx a...

Automatisierte Schnittstellentests mit Postman

Inhaltsverzeichnis Hintergrundbeschreibung Erstel...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.11 (Win10)

In diesem Artikel werden die Installations- und K...

Vue implementiert eine kleine Formularvalidierungsfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Einige Vorschläge zur Gewährleistung der MySQL-Datensicherheit

Daten sind das wichtigste Kapital eines Unternehm...

Native JS-Drag-and-Drop-Funktion zum Erstellen eines Slider-Beispielcodes

Drag & Drop ist eine gängige Funktion im Fron...

Einige Tipps zur Verwendung von Less in Vue-Projekten

Inhaltsverzeichnis Vorwort 1. Stildurchdringung 1...

Lösen Sie das Problem der Installation von Theano auf Ubuntu 19

Lösung: Ändern Sie die Datei setup.py direkt in d...

Die Tücken der automatischen Inkrementierung numerischer MySQL-Typen

Beim Entwurf von Tabellenstrukturen gehören numer...