Beispielcode zur Implementierung der MySQL-Master-Slave-Replikation in Docker

Beispielcode zur Implementierung der MySQL-Master-Slave-Replikation in Docker

1. Übersicht

1. Grundsatz

  • Der Masterserver zeichnet Datenänderungen in einem Binärprotokoll auf. Wenn sich Daten auf dem Master ändern, werden die Änderungen in das Binärprotokoll geschrieben.
  • Der Slave-Server erkennt in einem bestimmten Zeitintervall, ob sich das Master-Binärprotokoll geändert hat. Wenn dies der Fall ist, startet er einen I/OThread, um das Master-Binärereignis anzufordern.
  • Gleichzeitig startet der Masterknoten einen Dump-Thread für jeden I/O-Thread, um ihm binäre Ereignisse zu senden und sie im lokalen Relay-Protokoll des Slaveknotens zu speichern. Der Slaveknoten startet den SQL-Thread, um das binäre Protokoll aus dem Relay-Protokoll zu lesen und es lokal wiederzugeben, damit seine Daten mit denen des Masterknotens übereinstimmen. Schließlich wechseln der I/OThread und der SQLThread in einen Ruhezustand und warten darauf, beim nächsten Mal geweckt zu werden.

Master-Slave-Flussdiagramm

2. Umsetzung

Master-Bibliothek: 192.168.3.13:3310 Slave-Bibliothek: 192.168.3.14:3310 2. Erstellen Sie die Master-Master-Bibliothek Geben Sie den Server 192.168.3.13 ein

1. Installieren Sie das Image

docker pull mysql:8.0.26

2. Neues Verzeichnis erstellen

mkdir -p /home/apps/mysql-master/{config,log,data}

3. Erstellen und starten

docker run -d --name mysql-master \
--restart=immer \
--privilegiert=true \
-p 3310:3306 \
-v /home/apps/mysql-master/config:/etc/mysql/conf.d \
-v /home/apps/mysql-master/log:/var/log/mysql \
-v /home/apps/mysql-master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.26

4. Master-Basiskonfiguration hinzufügen/ändern

vim /home/apps/mysql-master/config/my.cnf

Fügen Sie den folgenden Inhalt hinzu

[Kunde]
Standardzeichensatz = utf8
 
[mysql]
Standardzeichensatz = utf8
 
[mysqld]
init_connect = 'SET-Sortierung_Verbindung = utf8_unicode_ci'
init_connect='Namen festlegen utf8'
Zeichensatzserver = utf8
Sortierserver = utf8_unicode_ci
Zeichensatz-Client-Handshake überspringen
Namensauflösung überspringen

3. Erstellen Sie eine Slave-Instanz

Geben Sie den Server 192.168.3.14 ein

1. Gleiche wie oben beschrieben

# Verzeichnis erstellen mkdir -p /home/apps/mysql-slave-01/{config,log,data}

# Starten Sie den Container docker run -d --name mysql-slave-01 \
--restart=immer \
--privilegiert=true \
-p 3310:3306 \
-v /home/apps/mysql-slave-01/config:/etc/mysql/conf.d \
-v /home/apps/mysql-slave-01/log:/var/log/mysql \
-v /home/apps/mysql-slave-01/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.26


# Ändern Sie die Grundkonfiguration des Slaves vim /home/apps/mysql-slave-01/config/my.cnf

# Fügen Sie den folgenden Inhalt hinzu [Client]
Standardzeichensatz = utf8
 
[mysql]
Standardzeichensatz = utf8
 
[mysqld]
init_connect = 'SET-Sortierung_Verbindung = utf8_unicode_ci'
init_connect='Namen festlegen utf8'
Zeichensatzserver = utf8
Sortierserver = utf8_unicode_ci
Zeichensatz-Client-Handshake überspringen
Namensauflösung überspringen

4. Master-Slave-Konfiguration

1. Masterkonfiguration hinzufügen

vim /home/apps/mysql-master/config/my.cnf
server_id=1

# Binärprotokoll aktivieren log-bin=mysql-bin
schreibgeschützt = 0

# Datenbank, die synchronisiert werden muss binlog-do-db=rapid-cloud
binlog-do-db=schneller-Cloud-Test

# Zu ignorierende Datenbank replicate-ignore-db=mysql
replizieren-ignorieren-db=sys
replicate-ignore-db=Informationsschema
replicate-ignore-db=Leistungsschema

2. Starten Sie den Container neu

Docker startet MySQL-Master neu

3. Slave-Konfiguration hinzufügen

vim /home/apps/mysql-slave-01/config/my.cnf

server_id=2
log-bin=mysql-bin
schreibgeschützt=1
binlog-do-db=schnelle-Cloud
binlog-do-db=schneller-Cloud-Test

replizieren-ignorieren-db=mysql
replizieren-ignorieren-db=sys
replicate-ignore-db=Informationsschema
replicate-ignore-db=Leistungsschema

4. Starten Sie den Container neu

Docker startet MySQL-Slave-01 neu

5. Fügen Sie ein Konto hinzu, um Benutzer zu synchronisieren

# Geben Sie den Container ein docker exec -it mysql-master /bin/bash

# Geben Sie die Haupt-MySQL-Datenbank ein mysql -u root -p

# Autorisieren Sie Root für den Remotezugriff (das hat nichts mit Master-Slave zu tun, sondern dient nur dazu, unsere Remoteverbindung zu MySQL zu ermöglichen)

# Remote-ALTER-USER 'root'@'%' autorisieren. IDENTIFIED WITH mysql_native_password BY '123456';

# Berechtigungen leeren;


# Backup-Benutzer erstellen # Sie sollten zuerst einen neuen Benutzer erstellen. Erstellen Sie den Benutzer „Backup“@„%“, identifiziert durch „123456“;

# Führen Sie die Autorisierung aus und erteilen Sie „Backup“@„%“ alle Berechtigungen für *.*.

# Berechtigungen leeren;

# Remote-ALTER-USER 'backup'@'%' autorisieren. IDENTIFIED WITH mysql_native_password BY '123456';

# Berechtigungen leeren;

# Den Status der Masterdatenbank anzeigen „show master status“; 

6. Einrichten der Master-Datenbankverbindung in der Slave-Datenbank

# Geben Sie den Container ein docker exec -it mysql-slave-01 /bin/bash

# Geben Sie die Haupt-MySQL-Datenbank ein mysql -u root -p

Ändern Sie Master in master_host='192.168.3.13',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3310;

7. Starten Sie die Slave-Synchronisation

Kopieren Sie zunächst die Daten der Master-Datenbank in die Slave-Datenbank, einschließlich der Tabellenstruktur und der Daten

Löschen Sie das Binärprotokoll der Hauptbibliothek, sodass seine Position bei 0 beginnt.

Master-Protokolle nach „mysql-bin.000001“ löschen;

Synchronisierung aktivieren

# Synchronisierung starten, Slave starten;

# Synchronisierung stoppen. # Slave stoppen;

# Überprüfen Sie den Synchronisierungsstatus. Show Slave Status\G; 

8. Fehlerbehebung

Wenn keine Master-Slave-Synchronisierung möglich ist, können Sie Folgendes überprüfen:

Zusammenfassen:

Die Master- und Slave-Datenbanken geben in ihren Konfigurationsdateien an, welche Datenbanken synchronisiert werden müssen und welche ignoriert werden sollen. Und die Server-ID darf nicht mit der Master-Datenbank identisch sein, die ein bestimmtes Konto und Passwort zum Synchronisieren ihrer eigenen Daten autorisiert. Die Slave-Datenbank verwendet dieses Konto und Passwort, um sich mit der Master-Datenbank zu verbinden und Daten zu synchronisieren.

5. Referenz

https://www.cnblogs.com/heian99/p/12104189.html

https://blog.csdn.net/lilygg/article/details/98187015

Binlog löschen: https://www.cnblogs.com/kiko2014551511/p/11532426.html

Dies ist das Ende dieses Artikels über den Beispielcode zur Implementierung der MySQL-Master-Slave-Replikation in Docker. Weitere verwandte Inhalte zur MySQL-Master-Slave-Replikation finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So führen Sie MySQL in einer Docker-Umgebung aus und aktivieren Binlog, um die Master-Slave-Synchronisierung zu konfigurieren
  • Realisieren Sie eine inkrementelle MySQL-Datenübertragung in Echtzeit basierend auf Docker und Canal
  • So stellen Sie MySQL-Master und -Slave in Docker bereit
  • Detaillierte Erklärung zum Erstellen einer MySQL-Master-Slave-Umgebung mit Docker
  • Docker öffnet das MySQL-Binlog-Protokoll, um Datenvolumenprobleme zu lösen

<<:  18 Sets exquisiter kostenloser Symbolmaterialien im Apple-Stil zum Teilen

>>:  Praktische Erfahrung bei der Optimierung von MySQL-Tabellen mit mehreren zehn Millionen Daten

Artikel empfehlen

Erkennung und Lösung von Vue.$set-Fehlerfallen

Ich habe zufällig festgestellt, dass Vue.$set im ...

Detaillierte Erklärung der Javascript-Grundlagenschleife

Inhaltsverzeichnis Zyklus für für-in für-von währ...

Zusammenfassung einiger gängiger Methoden des JavaScript-Arrays

Inhaltsverzeichnis 1. So erstellen Sie ein Array ...

So richten Sie domänenübergreifenden Zugriff in IIS web.config ein

Anforderung: Die Seite muss ein Bild anzeigen, ab...

Zusammenfassung der wichtigsten Wissenspunkte zur MySQL-Abfrageoptimierung

Vorwort Abfrageoptimierung ist nichts, was über N...

Eine kurze Erläuterung des Lazy-Loading-Attributmusters in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. On-Demand-Att...

Installieren Sie JDK8 im RPM-Modus auf CentOS7

Nach der erfolgreichen Installation von CentOS 7 ...

JS-Implementierung des Apple-Rechners

In diesem Artikelbeispiel wird der spezifische JS...

Eine Lösung für einen Fehler in IE6 mit jquery-multiselect

Bei der Verwendung von jquery-multiselect (einem ...

Lösung für das Problem des MySQL-Threads beim Öffnen von Tabellen

Problembeschreibung Vor kurzem gab es einen MySQL...