So erstellen Sie eine MySQL-Master-Slave-Datenbank mit Docker unter MacOS

So erstellen Sie eine MySQL-Master-Slave-Datenbank mit Docker unter MacOS

1. Ziehen Sie das MySQL-Image

Holen Sie sich das neueste MySQL-Image über das Terminal

Docker Pull MySQL/MySQL-Server

2. Erstellen Sie das Verzeichnis, das der MySQL-Datenbankcontainer-Konfigurationsdatei entspricht

Wir erstellen eine Reihe von Verzeichnissen unter dem aktuellen Benutzer, um die MySQL-Containerkonfigurationsdateien zu speichern (unter Linux kann dieser Schritt weggelassen werden). Siehe folgende Abbildung:

Hinweis: Für MySQL Version 8 und höher müssen Sie MySQL-Dateien zur Zuordnungsdatei hinzufügen. Andernfalls schlägt die Erstellung des MySQL-Datenbankcontainers fehl.

Da MacOS weder die direkte Änderung der Datei my.cnf mit vi/vim noch die Installation von vim mit apt-get unterstützt, müssen Sie lokal zwei neue my.cnf-Zuordnungsdateien erstellen. (Unter Linux können Sie die Konfigurationsdatei direkt über vim ändern.)

Die der Masterdatenbank entsprechende my.cnf-Konfigurationsdatei lautet:

[mysqld]
Server-ID = 1
log-bin=mysql-bin
schreibgeschützt = 0
replicate-ignore-db=mysql
replizieren-ignorieren-db=sys
replicate-ignore-db=Informationsschema
replicate-ignore-db=Leistungsschema

Die der Slave-Bibliothek entsprechende my.cnf-Konfigurationsdatei lautet:

[mysqld]
Server-ID = 2
log-bin=mysql-bin
schreibgeschützt=1
replizieren-ignorieren-db=mysql
replizieren-ignorieren-db=sys
replicate-ignore-db=Informationsschema
replicate-ignore-db=Leistungsschema

3. Erstellen Sie zwei MySQL-Datenbankcontainer

Erstellen des Masterdatenbankcontainers

docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Benutzer/yumaster/test/mysql_master_slave/master/data:/var/lib/mysql -v /Benutzer/yumaster/test/mysql_master_slave/master/conf/my.cnf:/etc/mysql/my.cnf -v /Benutzer/yumaster/test/mysql_master_slave/master/mysql-files:/var/lib/mysql-files mysql/mysql-server

Erstellen eines Slave-Datenbankcontainers

docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Benutzer/yumaster/test/mysql_master_slave/slave/data:/var/lib/mysql -v /Benutzer/yumaster/test/mysql_master_slave/slave/conf/my.cnf:/etc/mysql/my.cnf -v /Benutzer/yumaster/test/mysql_master_slave/slave/mysql-files:/var/lib/mysql-files mysql/mysql-server

Wie in der folgenden Abbildung gezeigt, wurden zwei MySQL-Container erfolgreich erstellt.

An diesem Punkt öffnen wir das Docker-Dashboard und können sehen, dass die beiden Container bereits laufen. Und der Port ist der entsprechende Port, den wir zuvor erstellt haben

Wenn wir eine Verbindung über Navicat herstellen, erhalten wir die Fehlermeldung 1130, da das verbundene Benutzerkonto keine Berechtigung für eine Remoteverbindung hat. Sie müssen das Hostelement in der Benutzertabelle in der MySQL-Datenbank ändern

Ändern Sie „localhost“ in „%“

Konkrete Schritte:

mysql> mysql verwenden
Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen
Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten

Datenbank geändert
mysql> wähle Host vom Benutzer aus, wobei Benutzer='root' ist;
+-------------+
| Gastgeber |
+-------------+
| lokaler Host |
+-------------+
1 Zeile im Satz (0,01 Sek.)

mysql> Benutzer aktualisieren, Host festlegen = "%", wobei Benutzer = "root" ist;
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0

mysql> wähle Host vom Benutzer aus, wobei Benutzer='root' ist;
+------+
| Gastgeber |
+------+
| % |
+------+
1 Zeile im Satz (0,00 Sek.)

mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)

4. Master-Slave-Datenbankkonfiguration

Konfiguration der Master-Datenbank:

//Geben Sie den Stammdatencontainer ein docker exec -it mysql-master mysql -uroot -p123456
//Erstellen Sie einen Benutzer zum Synchronisieren von Daten. Jeder Slave verwendet einen standardmäßigen MySQL-Benutzernamen und ein Standardkennwort, um eine Verbindung zum Master herzustellen. Dem Benutzer, der Replikationsvorgänge durchführt, wird das Privileg REPLICATION SLAVE erteilt. Die Verschlüsselungsregel in Versionen vor mysql8 lautet mysql_native_password, und nach mysql8 lautet die Verschlüsselungsregel caching_sha2_password
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; (Dies kann einen Fehler verursachen, wenn der Slave eine Verbindung mit dem Master herstellt)
oder CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
//Autorisieren Sie den Benutzer GRANT REPLICATION SLAVE ON *.* für „Slave“@„%“;
//Überprüfen Sie den Status und merken Sie sich die Werte von Datei und Position. Show-Master-Status wird im Slave verwendet;
//Frage die IP des Master-Containers ab, die verwendet wird, wenn der Slave die Verbindung zur Master-Bibliothek einrichtet docker inspect mysql-master | grep IPA;

Status des Masters, Datei mysql-bin.000003 Position 661

Konfiguration der Slave-Slave-Datenbank:

//Geben Sie den Slave-Datencontainer ein docker exec -it mysql-slave mysql -uroot -p123456
//Setze den Link zur Master-Bibliothek, ändere den Master auf
Ändern Sie Master in master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=661,master_port=3306;
//Slave-Synchronisierung starten start slave;
//Überprüfen Sie den Status show slave status\G;
//Wenn das Ergebnis des Befehls „show slave status\G“ Folgendes anzeigt:
//Slave_IO_Running: Ja
//Slave_SQL_Running: Ja
//Wenn beide der oben genannten Punkte mit „Ja“ beantwortet werden, liegt kein Problem vor.
//Andernfalls konfigurieren Sie die Slave-Daten neu. Stop Slave;
alle Slaves zurücksetzen;

Slave-Synchronisierung erfolgreich gestartet

5. Master-Slave-Verifizierung

Wir erstellen eine Datenbank auf dem Master, erstellen dann eine Tabelle und fügen ein Datenelement ein, und der entsprechende Slave wird ebenfalls vergrößert.

Datenbank Master_Slave_Demo erstellen;
verwenden Sie master_slave_demo;
Tabelle erstellen userinfo(Benutzername varchar(50),Alter int);
in Benutzerinfowerte einfügen („Toulon“, 25);
Wählen Sie * aus Benutzerinformationen;

Vor der Ausführung des Befehls ist die Anzahl der Master- und Slave-Datenbanken gleich.

Nachdem der Master den Befehl ausgeführt hat, fügt der Slave die entsprechenden Daten hinzu

Es kann festgestellt werden, dass die neu hinzugefügten Daten in der Hauptdatenbank synchronisiert wurden und die Master-Slave-Replikation von MySQL eingerichtet wurde. (Testumgebung, MacOS M1 ARM64-Maschine, Docker, MySQL 8.0.27)

Dies ist das Ende dieses Artikels über die Verwendung von Docker zum Erstellen einer MySQL-Master-Slave-Datenbank unter MacOS. Weitere Informationen zur Verwendung von Docker zum Erstellen einer MySQL-Master-Slave-Datenbank 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:
  • Zwei Möglichkeiten zur Lösung des Problems, dass die MySQL-Master-Slave-Datenbank nicht synchronisiert wird
  • Konfiguration der MySQL-Master/Slave-Datenbanksynchronisierung und häufige Fehler
  • Detaillierte Erläuterung der MySQL Master-Slave-Datenbankkonstruktionsmethode
  • Beispiel einer in PHP implementierten Funktion zur Statuserkennung einer MySQL-Master-Slave-Datenbank

<<:  Pygame-Code zum Erstellen eines Schlangenspiels

>>:  Herausforderung des HTML-Symbol-zu-Entity-Algorithmus

Artikel empfehlen

Erstellen einer einfachen Game-Engine mit React Native

Inhaltsverzeichnis Einführung Erste Schritte Eine...

Detaillierte Erläuterung der Mybatis-Sonderzeichenverarbeitung

Vorwort: Mybatis-Sonderzeichenverarbeitung, Verar...

HTML-Beispielcode zum Lesen und Anzeigen von Bildern in einem lokalen Ordner

Ein Zweck Wählen Sie auf der HTML-Seite einen lok...

CentOS7-Installations-Tutorial für Zabbix 4.0 (Abbildung und Text)

Deaktivieren Sie SeLinux setenforce 0 Dauerhaft g...

JavaScript zum Erreichen eines einfachen Seiten-Countdowns

In diesem Artikelbeispiel wird der spezifische Ja...

Docker-Bereitstellung von Implementierungsschritten für Flask-Anwendungen

1. Zweck Schreiben Sie lokal eine Flask-Anwendung...

So vergleichen Sie zwei Datenbanktabellenstrukturen in MySQL

Während des Entwicklungs- und Debugging-Prozesses...

MySQL-Abfrageoptimierung: Eine Tabellenoptimierungslösung für 1 Million Daten

1. Abfragegeschwindigkeit von zwei Abfrage-Engine...