


Construction et principe de réplication maître-esclave MySQL basés sur Docker
Pourquoi le construire basé sur Docker ?
- Ressources limitées
- La création d'une machine virtuelle nécessite une configuration de la machine, et les étapes d'installation de MySQL sont fastidieuses
- Une machine peut exécuter plusieurs conteneurs Docker
- Les conteneurs Docker sont indépendants les uns des autres, ont des adresses IP indépendantes et n'entrent pas en conflit les uns avec les autres
- Les étapes d'utilisation de Docker sont simples et le conteneur peut être démarré en quelques secondes
Utilisez Docker pour construire un serveur maître-esclave
Tirez d'abord l'image docker, nous utilisons la version 5.7 de mysql ici : docker pull mysql:5.7
Ensuite, utilisez cette image pour démarrer le conteneur, ici vous devez démarrer les conteneurs maître et esclave séparément
Maître (Maître) :
docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Esclave (Esclave)
docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Le port mappé en externe par le maître est 3339 et le port mappé en externe par l'esclave est 3340. Étant donné que les conteneurs Docker sont indépendants les uns des autres, chaque conteneur possède sa propre adresse IP indépendante. Il n'y aura donc aucun conflit entre différents conteneurs utilisant le même port. Ici, nous devrions essayer d'utiliser le port 3306 par défaut de MySQL, sinon il pourrait y avoir un problème d'impossibilité de se connecter à MySQL dans le conteneur Docker via IP.
Utilisez la commande docker ps
pour afficher le conteneur en cours d'exécution :
À ce stade, vous pouvez utiliser des outils tels que Navicat pour tester la connexion à MySQL
Configurer Master (principal)
Entrez dans le conteneur Master via la commande docker exec -it 5ddad8c2f368 /bin/bash
, ou vous pouvez entrer via la commande docker exec -it mysql-master /bin/bash
. 5ddad8c2f368 est l'identifiant du conteneur et mysql-master est le nom du conteneur. cd /etc/mysql/mysql.conf.d
Basculez vers le répertoire /etc/mysql/mysql.conf.d, puis vim mysqld.cnf
éditez my.cnf. À ce moment-là, bash: vim: command not found
sera signalé et nous devons installer vim nous-mêmes à l'intérieur du conteneur Docker. L'utilisation de la commande apt-get install vim
pour installer vim
entraînera les problèmes suivants :
Exécutez apt-get update
, puis exécutez à nouveau apt-get install vim
pour installer vim avec succès. Ensuite, nous pouvons utiliser vim pour éditer my.cnf et ajouter la configuration suivante à my.cnf :
[mysqld] ## 同一局域网内注意要唯一 server-id=100 ## 开启二进制日志功能,可以随便取(关键) log-bin=mysql-bin
Une fois la configuration terminée, vous devez redémarrer le service mysql pour que la configuration prenne effet. Utilisez service mysql restart
pour terminer le redémarrage. Le redémarrage du service MySQL arrêtera le conteneur Docker, et nous devons également docker start mysql-master
démarrer le conteneur.
Étape suivante, créez un utilisateur de synchronisation de données dans la base de données maître et accordez à l'utilisateur les autorisations slave REPLICATION SLAVE
et REPLICATION CLIENT
pour synchroniser les données entre les bases de données maître et esclave.
Connectez-vous d'abord à la base de données mysql root@5ddad8c2f368:/# mysql -uroot -p123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
Accordez au compte de copie
REPLICATION CLIENT
l'autorisation, la copie l'utilisateur peut utiliserSHOW MASTER STATUS, SHOW SLAVE STATUS
etSHOW BINARY LOGS
pour déterminer l'état de la réplication.
Accordez au compte de copieREPLICATION SLAVE
l'autorisation pour que la copie puisse vraiment fonctionner.
Configurer l'esclave (esclave)
est identique à la configuration du maître (maître), ajoutez ce qui suit au fichier de configuration de l'esclave Configuration my.cnf :
[mysqld] ## 设置server_id,注意要唯一 server-id=101 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin ## relay_log配置中继日志 relay_log=edu-mysql-relay-bin
Une fois la configuration terminée, vous devez également redémarrer le service mysql et le conteneur docker. L'opération est cohérente avec la configuration principale.
Le journal de relais est similaire au journal binaire à bien des égards. La différence est la suivante : le thread d'E/S du serveur esclave lit le journal binaire du serveur maître et l'enregistre dans le fichier local du serveur esclave, puis le thread SQL lit le contenu du journal du journal de relais et l'applique au serveur esclave. serveur esclave, ce qui permet aux données du serveur esclave et du serveur maître de rester cohérentes.
Lier Maître (maître) et Esclave (esclave)
Entrez mysql dans Maître et exécutez show master status;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。
在Slave 中进入 mysql,执行
CHANGE MASTER TO master_host = '172.17.0.2', master_user = 'slave', master_password = '123456', master_port = 3306, master_log_file = 'mysql-bin.000001', master_log_pos = 617, master_connect_retry = 30;
命令说明:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
在Slave 中的mysql终端执行show slave status \G;
用于查看主从同步状态。
正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave
开启主从复制过程,然后再次查询主从同步状态show slave status \G;
。
SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。
主从复制排错:
使用start slave
开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。
- 网络不通
检查ip,端口 - 密码不对
检查是否创建用于同步的用户和用户密码是否正确 - pos不对
检查Master的 Position
测试主从复制
测试主从复制方式就十分多了,最简单的是在Master创建一个数据库,然后检查Slave是否存在此数据库。
Master:
Slave:
完整的主备流程图
最后让我们来看一下,一个 update 语句在节点 A 执行,然后同步到节点 B的完整流程图。
可以看到:主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写入binlog。
备库B跟主库A之间维持了一个长连接。主库A内部有一个线程,专门用于服务备库B的这个长连接。
一个事务日志同步的完整过程是这样的:
- 1、在备库B上通过
change master
命令,设置主库A的IP、端口、用户名、密码、以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量。 - 2、在备库B上执行
start slave
命令,这时侯备库会启动两个线程,io_thread 和 sql_thread。其中, io_thread负责与主库建立连接。 - 3、主库A校验完用户名、密码后,开始按照备库B传过来的位置,从本地读取binlog,发给B。
- 4、备库B拿到binlog后,写到本地文件,称为中转日志(relay log)。
- 5、sql_thread读取中转日志,解析日志里的命令,并执行。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans la base de données MySQL, la relation entre l'utilisateur et la base de données est définie par les autorisations et les tables. L'utilisateur a un nom d'utilisateur et un mot de passe pour accéder à la base de données. Les autorisations sont accordées par la commande Grant, tandis que le tableau est créé par la commande Create Table. Pour établir une relation entre un utilisateur et une base de données, vous devez créer une base de données, créer un utilisateur, puis accorder des autorisations.

MySQL convient aux débutants car il est simple à installer, puissant et facile à gérer les données. 1. Installation et configuration simples, adaptées à une variété de systèmes d'exploitation. 2. Prise en charge des opérations de base telles que la création de bases de données et de tables, d'insertion, d'interrogation, de mise à jour et de suppression de données. 3. Fournir des fonctions avancées telles que les opérations de jointure et les sous-questionnaires. 4. Les performances peuvent être améliorées par l'indexation, l'optimisation des requêtes et le partitionnement de la table. 5. Prise en charge des mesures de sauvegarde, de récupération et de sécurité pour garantir la sécurité et la cohérence des données.

Navicat lui-même ne stocke pas le mot de passe de la base de données et ne peut récupérer que le mot de passe chiffré. Solution: 1. Vérifiez le gestionnaire de mots de passe; 2. Vérifiez la fonction "Remember Motway" de Navicat; 3. Réinitialisez le mot de passe de la base de données; 4. Contactez l'administrateur de la base de données.

1. Utilisez l'index correct pour accélérer la récupération des données en réduisant la quantité de données numérisées SELECT * FROMMLOYEESEESHWHERELAST_NAME = 'SMITH'; Si vous recherchez plusieurs fois une colonne d'une table, créez un index pour cette colonne. If you or your app needs data from multiple columns according to the criteria, create a composite index 2. Avoid select * only those required columns, if you select all unwanted columns, this will only consume more server memory and cause the server to slow down at high load or frequency times For example, your table contains columns such as created_at and updated_at and timestamps, and then avoid selecting * because they do not require inefficient query se

Créez une base de données à l'aide de NAVICAT Premium: Connectez-vous au serveur de base de données et entrez les paramètres de connexion. Cliquez avec le bouton droit sur le serveur et sélectionnez Créer une base de données. Entrez le nom de la nouvelle base de données et le jeu de caractères spécifié et la collation. Connectez-vous à la nouvelle base de données et créez le tableau dans le navigateur d'objet. Cliquez avec le bouton droit sur le tableau et sélectionnez Insérer des données pour insérer les données.

NAVICAT pour MARIADB ne peut pas afficher directement le mot de passe de la base de données car le mot de passe est stocké sous forme cryptée. Pour garantir la sécurité de la base de données, il existe trois façons de réinitialiser votre mot de passe: réinitialisez votre mot de passe via Navicat et définissez un mot de passe complexe. Affichez le fichier de configuration (non recommandé, haut risque). Utilisez des outils de ligne de commande système (non recommandés, vous devez être compétent dans les outils de ligne de commande).

La copie d'une table dans MySQL nécessite la création de nouvelles tables, l'insertion de données, la définition de clés étrangères, la copie des index, les déclencheurs, les procédures stockées et les fonctions. Les étapes spécifiques incluent: la création d'une nouvelle table avec la même structure. Insérez les données de la table d'origine dans une nouvelle table. Définissez la même contrainte de clé étrangère (si le tableau d'origine en a un). Créer le même index. Créez le même déclencheur (si le tableau d'origine en a un). Créez la même procédure ou fonction stockée (si la table d'origine est utilisée).

Affichez la base de données MySQL avec la commande suivante: Connectez-vous au serveur: MySQL -U Username -P mot de passe Exécuter les bases de données Afficher les bases de données; Commande pour obtenir toutes les bases de données existantes Sélectionnez la base de données: utilisez le nom de la base de données; Tableau de vue: afficher des tables; Afficher la structure de la table: décrire le nom du tableau; Afficher les données: sélectionnez * dans le nom du tableau;
