Detaillierte Erklärung zum Erstellen einer MySQL-Master-Slave-Umgebung mit Docker

Detaillierte Erklärung zum Erstellen einer MySQL-Master-Slave-Umgebung mit Docker

Vorwort

Dieser Artikel beschreibt, wie ich Docker-Compose und Dockerfile verwende, um eine auf Binlog basierende MySQL-Master-Slave-Umgebung zu erstellen. Wenn Sie die Schritte in diesem Artikel genau befolgen, können Sie meiner Meinung nach schnell eine grundlegende MySQL-Master-Slave-Umgebung erstellen.

einführen

Die MySQL Master-Slave-Synchronisierung gliedert sich in drei Schritte:

  • Der Masterknoten schreibt Datenaktualisierungsdatensätze in das Binärprotokoll.
  • Der Slave-Knoten startet den IO-Thread, um eine Verbindung mit dem Master-Knoten herzustellen, und fordert den Abruf des Protokolls nach der angegebenen Position der angegebenen Binärprotokolldatei an.
  • Der Binärprotokoll-Dump-Thread des Masterknotens überträgt die angegebenen Binärprotokollinformationen an den Slaveknoten.
  • Nach dem Empfang der Nachricht schreibt der IO-Thread des Slave-Knotens den Protokollinhalt in die Relay-Protokolldatei.
  • Der SQL-Thread des Slave-Knotens erkennt, dass dem Relay-Protokoll neuer Inhalt hinzugefügt wurde, analysiert die Relay-Protokolldatei sofort, um entsprechende SQL-Anweisungen zu generieren, und spielt diese SQL-Anweisungen erneut in die Datenbank ab, um die Master-Slave-Datenkonsistenz sicherzustellen.

Konfiguration

Erstellen der Verzeichnisstruktur

Lassen Sie uns zunächst die Verzeichnisstruktur erstellen. Meine Verzeichnisstruktur ist wie folgt. Wenn Sie das Verzeichnis nach Ihren eigenen Vorstellungen erstellen möchten, achten Sie darauf, den Dateipfad in der Datei docker-compose.yaml und der Dockerfile-Datei unten zu ändern.

Konfigurieren der Docker-Compose-Vorlagendatei

Version: "3"
Leistungen:
 MySQL-Master:
 bauen:
  Kontext: ./
  Dockerdatei: mysql/master/Dockerdatei
 Containername: MySQL-Master
 Bände:
  - ./mysql/master/data:/var/lib/mysql
 Neustart: immer
 Häfen:
  - 3305:3306
 Links:
  -mysql-Sklave

 MySQL-Slave:
 bauen:
  Kontext: ./
  Dockerdatei: mysql/slave/Dockerdatei
 Containername: MySQL-Slave
 Bände:
  - ./mysql/slave/data:/var/lib/mysql
 Neustart: immer
 Häfen:
  -3306:3306

Konfigurieren Sie die Datei cluster.cnf und die Dockerfile-Datei des Masterknotens

[mysqld]
server_id=100
binlog-ignore-db=mysql
log-bin=Replikate-MySQL-bin
binlog_cache_size=1M
binlog_format=gemischt
Slave_Überspringen_Fehler=1062

# Mein MySQL ist 8.x, also muss ich default_authentication_plugin=mysql_native_password wie folgt konfigurieren
Zeichensatzserver = utf8mb4
Sortierserver = utf8mb4_unicode_ci
VON mysql:latest
HINZUFÜGEN ./mysql/master/cluster.cnf /etc/mysql/conf.d/cluster.cnf
ENV MYSQL_ROOT_PASSWORD=Passwort

Konfigurieren Sie die Datei cluster.cnf und die Dockerfile-Datei des Slave-Knotens

[mysqld]
server_id=101
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=gemischt
Slave_Überspringen_Fehler=1062
relay_log=Replikate-MySQL-Relay-Bin
log_slave_updates=1
schreibgeschützt=1

# Mein MySQL ist 8.x, also muss ich default_authentication_plugin=mysql_native_password wie folgt konfigurieren
Zeichensatzserver = utf8mb4
Sortierserver = utf8mb4_unicode_ci
VON mysql:latest
HINZUFÜGEN ./mysql/slave/cluster.cnf /etc/mysql/conf.d/cluster.cnf
ENV MYSQL_ROOT_PASSWORD=Passwort

Erstellen eines Containers

docker-compose up -d MySQL-Master MySQL-Slave

Führen Sie den obigen Befehl aus, um einen Container zu erstellen. Wenn die Erstellungszeit zu lang ist, können Sie die Bildquelle ändern, z. B. die folgenden inländischen Bildquellen in hoher Qualität:

NetEase: http://hub-mirror.c.163.com

Alibaba Cloud: http://<Ihre ID>.mirror.aliyuncs.com

Universität für Wissenschaft und Technologie von China: http://docker.mirrors.ustc.ed...

Nachdem der Build abgeschlossen ist, überprüfen Sie mit dem Befehl docker ps , ob der Container normal ausgeführt wird. Wenn die folgende Situation auftritt, kann davon ausgegangen werden, dass der Build erfolgreich war.

Konfigurieren von Slave-Knoten

Rufen Sie zunächst den MySQL-Mastercontainer mit dem Docker-Befehl auf, melden Sie sich dann bei MySQL an und geben Sie den Befehl show master status ein, um den Status der Masterdatenbank abzurufen. Dabei müssen wir auf zwei Parameter achten, File und Position , die später zum Konfigurieren der Slavedatenbank verwendet werden.

Geben Sie als Nächstes den Docker-Befehl in den MySQL-Slave-Container ein, melden Sie sich dann bei MySQL an und geben Sie die folgende Anweisung ein, um eine Verbindung mit MySQL-Master herzustellen.

ÄNDERN SIE MASTER IN
 MASTER_HOST='mysql-master',
 MASTER_USER='root',
 MASTER_PASSWORD=das von Ihnen festgelegte Passwort,
 MASTER_LOG_FILE=Dateiparameter, der im vorigen Schritt erhalten wurde,
 MASTER_LOG_POS=Im vorherigen Schritt erhaltener Positionsparameter;

Geben Sie nach Eingabe des Befehls den Befehl start slave ein, um den Slave-Dienst zu starten. Geben Sie nach dem Start show slave status \G ein, um den Status des Slave-Knotens anzuzeigen. Wenn die folgende Situation eintritt, war die Konfiguration erfolgreich.

Testen Sie den Synchronisationsstatus des Master-Slave-Knotens

Melden Sie sich beim mysql-master-Knoten an und erstellen Sie eine neue Datenbank. Nachdem die Datenbank erfolgreich erstellt wurde, wechseln Sie zum mysql-slave-Knoten und geben Sie show databases; “ ein, um zu prüfen, ob die Synchronisierung erfolgreich war. Wenn die folgende Situation eintritt, war die Konfiguration erfolgreich. Sie können selbst andere Vorgänge ausprobieren und ich werde sie hier nicht demonstrieren.

Zusammenfassen

Dies sind die Schritte, die ich aufgezeichnet habe, als ich versuchte, eine MySQL-Master-Slave-Architektur zu erstellen. Dies ist das Ende dieses Artikels über die Verwendung von Docker zum Erstellen einer MySQL-Master-Slave-Umgebung. Weitere Informationen zur Verwendung von Docker zum Erstellen einer MySQL-Master-Slave-Umgebung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. 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
  • Beispielcode zur Implementierung der MySQL-Master-Slave-Replikation in Docker
  • Docker öffnet das MySQL-Binlog-Protokoll, um Datenvolumenprobleme zu lösen

<<:  Eine kurze Erläuterung des Datums-/Uhrzeitformats beim Exportieren von Tabellendaten von MySQL nach Excel

>>:  Detaillierte Erklärung der Unterschiede und Anwendungen von {{}}, v-text und v-html in Vue

Artikel empfehlen

Häufige Ursachen und Lösungen für langsame MySQL-SQL-Anweisungen

1. Langsame Abfrage aufgrund fehlenden oder ungül...

Uniapp WeChat-Applet: Lösung bei Schlüsselfehler

Uniapp-Code <Vorlage> <Ansicht> <i...

Analyse mehrerer Gründe, warum Iframe weniger verwendet werden sollte

Die folgende Grafik zeigt, wie zeitaufwändig es is...

jQuery-Plugin zum Erzielen eines Karusselleffekts

Jeden Tag ein jQuery-Plugin - jQuery-Plugin zur I...

Zwei Tools zum Teilen des Bildschirms im Linux-Befehlszeilenterminal

Hier sind zwei Terminal-Split-Screen-Tools: scree...

Erstellen Sie mit PS in zwei Minuten eine Homepage für eine XHTML+CSS-Website

Es gibt zu viele Artikel über Webstandards zur We...

So stellen Sie Gitlab mit Docker-Compose bereit

Docker-Compose stellt Gitlab bereit 1. Docker ins...

Webdesign-Referenz Firefox-Standardstil

Obwohl das W3C einige Standards für HTML festgeleg...

SQL-Funktion zum Zusammenführen eines Feldes

Vor kurzem musste ich alle Felder einer verknüpft...

CSS3-Radarscan-Kartenbeispielcode

Verwenden Sie CSS3, um coole Radar-Scan-Bilder zu...

Lösung zum Hinzufügen einer iptables-Firewall-Richtlinie zum MySQL-Dienst

Wenn Ihre MySQL-Datenbank auf einem CentOS7-Syste...

Eine kurze Analyse des Zeitproblems von MySQL

Der Standardzeittyp (Datum/Uhrzeit und Zeitstempe...

Detaillierte Erklärung der Definition und Funktion von Trennzeichen in MySQL

Wenn Sie MySQL zum ersten Mal lernen, verstehen S...