Heim  >  Artikel  >  Datenbank  >  Detaillierte Einführung in die Verwendung von Docker zum schnellen Aufbau einer MySQL-Master-Slave-Replikationsumgebung

Detaillierte Einführung in die Verwendung von Docker zum schnellen Aufbau einer MySQL-Master-Slave-Replikationsumgebung

黄舟
黄舟Original
2017-03-04 14:51:581218Durchsuche

Beim Erlernen von MySQL werden häufig die Auswirkungen verschiedener Parameter getestet. Zu diesem Zeitpunkt müssen Sie schnell eine MySQL-Instanz erstellen, sogar eine Master-Slave-Instanz.

Stellen Sie sich das folgende Szenario vor:

Zum Beispiel möchte ich die Auswirkung von mysqldump auf die Myisam-Tabelle testen, wenn der Parameter --single-transaction angegeben ist.

Ursprünglich wollte ich es in einer vorgefertigten Testumgebung machen, aber in der Testumgebung gibt es eine große Datenmenge. Führen Sie mysqldump aus, um die generierte SQL-Datei vollständig vorzubereiten, die schwer zu durchsuchen ist der Tisch.

Zu diesem Zeitpunkt bin ich besonders daran interessiert, eine Reihe sauberer Beispiele zum Testen zu haben.


In diesem Moment ist es besonders wichtig, schnell Fähigkeiten aufzubauen. Viele Kinder fragen sich vielleicht, ob dies nicht durch Skripte erreicht werden kann. Warum Docker verwenden?

Persönliches Gefühl: Das Skript ist zu umfangreich und erfordert viel zusätzliche Arbeit, wie z. B. das Erstellen von Benutzern, einen relativ langen Datenbankinitialisierungsprozess und den MySQL-Startprozess. Was ich brauche, ist die Fähigkeit, schnell und einfach zu erstellen schnell zerstören.

Und das ist die Stärke von Docker.

Das Folgende ist die Zeit, die zum Starten einer Instanz mit Docker benötigt wird. Sie beträgt weniger als 1 Sekunde. Wenn Sie dafür ein Skript verwenden, wird es nie so schnell sein.


# time  docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v //lib/mysql/slave://lib/mysql -p3307:-e MYSQL_ROOT_PASSWORD= -d mysql:


Also habe ich ein auf Docker basierendes Skript geschrieben, das in etwa 30 Minuten eine neue MySQL-Master-Slave-Replikationsumgebung erstellen kann Sekunden

#!/bin/=/var/lib/mysql/=/var/lib/mysql/ - - - ---name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD= -d mysql:.--name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v $SLAVE_DIR:/var/lib/mysql --net=host -e 
MYSQL_ROOT_PASSWORD= -. -it master mysql -S /var/lib/mysql/mysql.sock -e LAVE ON *.* TO @;=`docker exec -it master mysql 
-S /var/lib/mysql/mysql.sock -e =`  |   =`  |  =-it slave mysql -S /var/lib/mysql/mysql.sock -e eplrepldocker exec -it slave mysql 
-S /var/lib/mysql/mysql.sock -e   /etc/ [ $? -eq  ];
      >> /etc/  >> /etc/  >> /etc//etc/

Das Skript selbst muss nicht viel erklärt werden. Nachdem der Master-Slave-Container gestartet wurde, folgt er weiterhin dem allgemeinen Prozess zur Einrichtung der Master-Slave-Replikation.

Sprechen Sie hauptsächlich über die Optionen beim Erstellen eines Containers.

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34


-v /etc/master.cnf:/etc/mysql/my.cnf: Ordnen Sie die lokale Konfigurationsdatei der Containerkonfigurationsdatei zu, also The Der Effekt der Änderung der Containerkonfigurationsdatei kann durch Änderung der lokalen Konfigurationsdatei erreicht werden.

-v $MASTER_DIR:/var/lib/mysql: Ordnen Sie das lokale Verzeichnis dem Datenverzeichnis des Containers zu. Dies erleichtert die Anzeige des Inhalts des Datenverzeichnisses. Andernfalls wird es in /var gespeichert /lib/docker standardmäßig im Verzeichnis /volumes gespeichert ist, ist die Anzeige wirklich unpraktisch.

--net=host: Durch die gemeinsame Nutzung des Netzwerks des Hosts wird die Komplexität der Kommunikation zwischen Containern erheblich reduziert.

Hinweis

Beim ersten Start des Skripts wird der vorherige Container gelöscht. Dies umfasst zwei Schritte: 1. Löschen Sie den Container über den Docker-Befehl

2. Löschen Sie das Datenverzeichnis des vorherigen Containers über den Betriebssystembefehl.

Wenn Sie es nicht löschen und den Container mit dem folgenden Befehl erneut erstellen, wird das vorherige Datenverzeichnis nicht gelöscht, sondern direkt geladen, was dem Starten einer neuen Instanz vor mysqld entspricht Der Prozess wurde gestartet.


Dies gibt uns auch eine Idee. Wenn Sie nur die Funktion von Parametern testen möchten und keine neue Instanz erstellen möchten, müssen Sie dies nur tun Löschen Sie den Container mit dem Docker-Befehl und ändern Sie die Konfigurationsdatei. Erstellen Sie einfach den Container mit dem obigen Befehl.
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34

Nachdem wir die Instanz gestartet haben, haben wir einen Vorgang zum Neustarten der Instanz ausgeführt, da wir während des Tests festgestellt haben, dass die Ausführung von Vorgängen wie docker exec -it master bash dazu führt, dass der Container herunterfällt ( Der spezifische Grund für den Ausfall wurde noch nicht analysiert. Nach dem Neustart der Instanz tritt jedoch kein Problem auf.

docker stop master slave
docker start master slave

sleep 3


Tastenkombinationen festlegenMySQL: MySQL-Client, Sie können diesen Client Connect verwenden zu MySQL-Servern auf anderen Hosts.

master: Führen Sie „master“ aus, um sich bei der lokalen Master-Instanz anzumelden, wodurch die Angabe des Hostnamens und Ports entfällt.

salve: Slave ausführen, um sich bei der lokalen Slave-Instanz anzumelden.

Oben finden Sie eine ausführliche Einführung in die Verwendung von Docker zum schnellen Aufbau einer MySQL-Master-Slave-Replikationsumgebung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn