Maison > Article > base de données > Introduction détaillée sur la façon d'utiliser Docker pour créer rapidement un environnement de réplication maître-esclave MySQL
Dans le processus d'apprentissage de MySQL, les effets de divers paramètres sont souvent testés. À l’heure actuelle, vous devez créer rapidement une instance MySQL, même une instance maître-esclave.
Considérez le scénario suivant :
Par exemple, je souhaite tester l'impact de mysqldump sur la table myisam lorsque le paramètre --single-transaction est spécifié.
À l'origine, je voulais le réaliser dans un environnement de test prêt à l'emploi, mais il y a une grande quantité de données dans l'environnement de test. Exécutez mysqldump pour préparer complètement le fichier SQL généré, sur lequel il est difficile de rechercher. le tableau.
En ce moment, je suis particulièrement désireux d'avoir un ensemble d'exemples propres à tester.
En ce moment, il est particulièrement nécessaire de développer rapidement des capacités. De nombreux enfants peuvent se demander : cela ne peut-il pas être réalisé grâce à des scripts ? Pourquoi utiliser Docker ?
Sentiment personnel : le script est trop lourd et implique beaucoup de travail supplémentaire, comme la création d'utilisateurs, un processus d'initialisation de la base de données relativement long et le processus de démarrage de MySQL. Ce dont j'ai besoin, c'est de la capacité de construire rapidement et. détruire rapidement.
Et c’est la force de Docker.
Ce qui suit est le temps nécessaire pour démarrer une instance à l'aide de Docker, qui est inférieur à 1 seconde. Si vous utilisez un script pour le faire, ce ne sera jamais aussi rapide.
# 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:
J'ai donc écrit un script basé sur Docker, qui peut créer un nouvel environnement de réplication maître-esclave MySQL en 30 environ secondes
#!/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/
Le script lui-même n'a pas grand chose à expliquer. Une fois le conteneur maître-esclave démarré, il suit toujours le processus commun d'établissement de la réplication maître-esclave.
Parlez principalement des options impliquées dans la création d'un conteneur.
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 : mappez le fichier de configuration local au fichier de configuration du conteneur, donc, le L'effet de modification du fichier de configuration du conteneur peut être obtenu en modifiant le fichier de configuration local.
-v $MASTER_DIR:/var/lib/mysql : Mappez le répertoire local au répertoire de données du conteneur. Cela facilite la visualisation du contenu du répertoire de données. Sinon, il sera enregistré dans /var. /lib/docker par défaut. Répertoire /volumes, il est vraiment peu pratique à afficher.
--net=host : Le partage du réseau de l'hôte réduit considérablement la complexité de la communication entre les conteneurs.
Remarque
Lorsque le script démarre pour la première fois, le conteneur précédent sera supprimé. Cela implique deux étapes : 1. Supprimez le conteneur via la commande docker
2. Supprimez le répertoire de données du conteneur précédent via la commande du système d'exploitation.
Si vous ne le supprimez pas, lorsque vous créerez à nouveau le conteneur via la commande suivante, le répertoire de données précédent ne sera pas effacé, mais sera chargé directement, ce qui équivaut à démarrer une nouvelle instance avant le mysqld le processus a été lancé.
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
Après avoir démarré l'instance, nous avons effectué une opération pour redémarrer l'instance, car lors du test, nous avons constaté que si nous effectuons des opérations telles que docker exec -it master bash, cela entraînera la panne du conteneur ( la raison spécifique de l'arrêt n'est pas encore analysée), mais il n'y aura aucun problème après le redémarrage de l'instance.
docker stop master slave docker start master slave sleep 3
Définir les touches de raccourcimysql : client mysql, vous pouvez utiliser ce client Connect aux serveurs MySQL sur d'autres hôtes.
master : exécutez master pour vous connecter à l'instance principale locale, éliminant ainsi le besoin de spécifier le nom d'hôte et le port.
salve : Exécutez slave pour vous connecter à l'instance esclave locale.
Ce qui précède est une introduction détaillée sur la façon d'utiliser Docker pour créer rapidement un environnement de réplication maître-esclave MySQL. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !