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

Sequenzimplementierungsmethode basierend auf MySQL

Das Team ersetzte den neuen Rahmen. Alle neuen Un...

Warum TypeScripts Enum problematisch ist

Inhaltsverzeichnis Was ist passiert? Verwendung S...

So verwenden Sie js, um festzustellen, ob eine Datei UTF-8-codiert ist

Konventionelle Lösung Verwenden Sie FileReader, u...

Tabellen-Paging-Funktion implementiert durch Vue2.0+ElementUI+PageHelper

Vorwort Ich habe kürzlich an einigen Front-End-Pr...

nginx generiert automatisch Konfigurationsdateien im Docker-Container

Wenn ein Unternehmen eine automatisierte Docker-B...

Node verwendet das Modul async_hooks zur Anforderungsverfolgung

Das Modul async_hooks ist eine experimentelle API...

So exportieren und importieren Sie SQL-Dateien unter einem Linux-Befehl

Dieser Artikel beschreibt, wie Sie SQL-Dateien mi...

Tutorial zur Installation von phpMyAdmin unter Linux centos7

yum install httpd php mariadb-server –y Notieren ...

HTML-Tags dl, dt, dd zum Erstellen einer Tabelle vs. Tabellenerstellungstabelle

Dadurch werden nicht nur die Kosten für die Entwic...

Detaillierte Erklärung der Methoden und Eigenschaften von Vue

Vue-Methoden und -Eigenschaften 1. Methoden Verwe...