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

Erstellen der Benutzererfahrung

<br />Vielleicht sind Sie gerade in ein Unte...

Warum MySQL Repeatable Read als Standardisolationsebene wählt

Inhaltsverzeichnis Oracle-Isolationsebenen MySQL-...

Linux verwendet den Binärmodus zur Installation von MySQL

In diesem Artikel werden die einzelnen Schritte z...

Ändern Sie den Stil des HTML-Textkörpers in JS

Inhaltsverzeichnis 1. Ursprüngliche Definition 2....

Windows-Plattformkonfiguration Version 5.7 + MySQL-Datenbankdienst

Beinhaltet den Prozess der Initialisierung des Ro...

Einführung mehrerer benutzerdefinierter Schriftarten in CSS3

Heute habe ich ein Problem in HTML gefunden. Es s...

JavaScript verwendet häufig Array-Deduplizierung tatsächliche Kampf Quellcode

Mit der Array-Deduplizierung wird man häufig bei ...

Sequenzimplementierungsmethode basierend auf MySQL

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

MySQL-Methode und Beispiel für langsame Abfragen

1. Einleitung Durch Aktivieren des Slow Query Log...

Die 13 am häufigsten in Interviews gestellten Fragen zu Vue-Modifikatoren

Inhaltsverzeichnis 1. faul 2.trimmen 3.Nummer 4.H...

Einführung in die Verwendung des Base-Link-Tags Base

<br />Wenn Sie auf den Link klicken, wird di...

So verwenden Sie eine VLAN-getaggte Ethernet-Karte im CentOS/RHEL-System

In einigen Szenarien möchten wir derselben Ethern...