MySQL prend en charge la réplication unidirectionnelle et asynchrone. Le serveur fait office de serveur maître. Un ou plusieurs autres serveurs font office de serveurs esclaves. Le serveur maître écrit des mises à jour dans les fichiers journaux binaires et gère un index des fichiers journaux pour suivre la rotation des journaux. Lorsqu'un esclave se connecte au maître, il informe le maître de l'emplacement de la dernière mise à jour réussie lue par l'esclave dans le journal. Le serveur esclave reçoit toutes les mises à jour survenues depuis, puis bloque et attend que le serveur maître notifie la prochaine mise à jour.
Pourquoi utiliser la réplication maître-esclave ?
1. Le paramètre serveur maître/serveur esclave augmente la robustesse. En cas de problème avec le serveur maître, vous pouvez basculer vers le serveur esclave en guise de sauvegarde.
2. En répartissant la charge de traitement des requêtes des clients entre le serveur maître et le serveur esclave, vous pouvez obtenir un meilleur temps de réponse des clients. Mais ne faites pas la mise à jour sur les serveurs maître et esclave en même temps, car cela pourrait provoquer des conflits.
3. Un autre avantage de la réplication est que vous pouvez utiliser un serveur esclave pour effectuer des sauvegardes sans perturber le serveur maître. Le serveur maître peut continuer à traiter les mises à jour pendant le processus de sauvegarde.
MySQL utilise 3 threads pour exécuter les fonctions de réplication (1 sur le serveur maître et deux sur le serveur esclave. Lorsqu'un START SLAVE est émis, le serveur esclave crée un thread d'E/S pour se connecter au serveur maître et laisser le serveur maître envoyer du binaire. log. Le serveur maître crée un thread pour envoyer le contenu du journal binaire au serveur esclave. Le thread d'E/S du serveur esclave lit le contenu envoyé par le thread Binlog Dump du serveur maître et copie les données dans un fichier local dans l'esclave. répertoire de données du serveur, c'est-à-dire le journal de relais. Le troisième thread est le thread SQL. Le serveur esclave utilise ce thread pour lire le journal de relais et exécuter les mises à jour contenues dans le journal pour interroger la réplication effectuée sur le serveur maître. le serveur esclave. Informations.
Le journal de relais par défaut utilise un nom de fichier de la forme host_name-relay-bin.nnnnnn, où host_name est le nom d'hôte du serveur esclave et nnnnnn est le numéro de séquence. Créez des fichiers journaux de relais consécutifs avec des numéros de séquence consécutifs, en commençant. avec 000001. Suivez le fichier d'index du journal de relais pour identifier le journal de relais actuellement utilisé. Le fichier d'index du journal de relais par défaut est nommé host_name-relay-bin.index. Par défaut, ces fichiers sont créés dans le répertoire de données du serveur esclave. a le même format que le journal binaire et peut être lu avec mysqlbinlog Lorsque le thread SQL a exécuté tous les événements du journal de relais, le journal de relais sera automatiquement supprimé
du serveur et deux fichiers d'état supplémentaires seront créés dans le répertoire de données.
.Les fichiers d'état --master.info et relay-log.info sont enregistrés sur le disque dur et ne sont pas perdus lors de l'arrêt du serveur esclave. Au prochain démarrage du serveur esclave, ces fichiers sont lus pour déterminer le nombre de binaires. il a lu les journaux du serveur maître et dans quelle mesure ils gèrent leurs propres journaux de relais.
Pour configurer la réplication maître-esclave :
1. Assurez-vous que la version de MySQL installée sur le serveur maître et sur le serveur esclave est la même. et de préférence la dernière version stable de MySQL
sur le serveur maître. La réplication configure un compte de connexion. Ce compte doit disposer de l'autorisation REPLICATION SLAVE. Si le compte est utilisé uniquement pour la réplication (recommandé), aucune autre autorisation ne doit être accordée à
mysql>. GRANT REPLICATION SLAVE ON *.*
-> TO 'replication' @'%.yourdomain.com' IDENTIFIED BY 'slavepass';
3. Exécutez l'instruction FLUSH TABLES WITH READ LOCK pour effacer toutes les tables et bloquer les instructions d'écriture :
mysql> FLUSH. TABLES AVEC READ LOCK ;
empêchent le programme client mysql de se fermer. Un terminal prend un instantané du répertoire de données du serveur principal.
shell> cd /usr/local/mysql/
shell> tar -cvf /tmp/mysql-snapshot.tar ./data
Si le compte utilisateur du serveur esclave est différent de celui du serveur maître, vous ne souhaiterez peut-être pas copier le base de données mysql. Dans ce cas, la base de données doit être exclue de l'archive. Vous n'avez pas non plus besoin d'inclure des fichiers journaux ou des fichiers master.info ou relay-log.info dans l'archive.
Lorsque le verrou de lecture défini par FLUSH TABLES WITH READ LOCK est valide (c'est-à-dire que le programme client mysql ne se termine pas), lisez le nom du journal binaire actuel et la valeur de décalage sur le serveur principal :
mysql > SHOW MASTER STATUS
+--- ; --- ---------+----------+--------------+----------- --- ----+
| Position | Binlog_Do_DB | Binlog_Ignore_DB
+--------------+---------+ --- ------+------------------+
| mysql-bin.003 | 73 | manuel de test,mysql
+----- --- -------+----------+--------------+------------- --- --+
La colonne Fichier affiche le nom du journal et la Position affiche le décalage. Dans cet exemple, la valeur du journal binaire est mysql-bin.003 au décalage 73. Enregistrez cette valeur. Ces valeurs seront nécessaires ultérieurement lors de la configuration du serveur esclave. Ils représentent les coordonnées de réplication à partir desquelles l'esclave doit démarrer les nouvelles mises à jour depuis le maître.
Si --logs-bin n'est pas activé lorsque le serveur maître est en cours d'exécution, le nom du journal et les valeurs d'emplacement affichées par SHOW MASTER STATUS sont vides. Dans ce cas, les valeurs qui doivent être utilisées lors de la spécification future du fichier journal et de l'emplacement du serveur esclave sont des chaînes vides ('') et 4.
Après avoir pris l'instantané et enregistré le nom et le décalage du journal, retournez à l'extrémité intermédiaire précédente et redémarrez Activer l'activité d'écriture :
mysql> UNLOCK TABLES;
4. Assurez-vous que la section [mysqld] du fichier my.cnf sur l'hôte du serveur maître inclut une option log-bin. Cette section doit également avoir une option server-id=Master_id, où master_id doit être une valeur entière positive comprise entre 1 et 232-1. Par exemple :
[mysqld]
log-bin
server-id=1
Si ces options ne sont pas fournies, vous devez les ajouter et redémarrer le serveur.
5. Arrêtez le service mysqld sur le serveur esclave et ajoutez la ligne suivante à son fichier my.cnf :
[mysqld]
server-id=2
La valeur slave_id est la même que la valeur Master_id et doit être un entier positif compris entre 1 et 232. –1. valeur. De plus, l'ID du serveur esclave doit être différent de l'ID du serveur maître.
6. Enregistrez les données dans le répertoire de sauvegarde. Assurez-vous que les autorisations sur ces fichiers et répertoires sont correctes. L'utilisateur sous lequel le serveur MySQL est exécuté doit être capable de lire et d'écrire des fichiers, tout comme sur le serveur principal.
Shell> chown -R mysql:mysql /usr/local/mysql/data
7. Démarrez le serveur esclave. Exécutez l'instruction suivante sur le serveur esclave, en remplaçant les valeurs des options par les valeurs réelles de votre système :
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
8. Démarrez le thread du serveur esclave :
mysql> START SLAVE
Après avoir exécuté ces procédures, le serveur esclave doit se connecter au serveur maître et compléter tout mises à jour survenues depuis l'instantané.
9. Si une erreur de réplication se produit, un message d'erreur apparaîtra également dans le journal des erreurs (HOSTNAME.err) du serveur esclave.
10. Lors de la copie depuis le serveur, les fichiers master.info et HOSTNAME-relay-log.info se trouveront dans son répertoire de données. L'esclave utilise ces deux fichiers pour suivre la quantité de journal binaire du maître qui a été traitée. Ne supprimez ni ne modifiez ces fichiers à moins de savoir exactement ce que vous faites et d'en comprendre pleinement la signification. Néanmoins, il est préférable d'utiliser l'instruction CHANGE MASTER TO.