Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment répliquer la base de données MySQL sur un autre serveur

MySQL Replication vous permet de copier facilement une base de données d'un serveur à un autre. MySQL prend en charge différents types de réplication tels que la réplication maître-esclave, maître-maître et de groupe. MariaDB prend également en charge la réplication multi-maîtres. Dans cet article, nous examinerons la réplication maître-esclave dans MySQL et apprendrons comment répliquer la base de données MySQL sous Linux. Vous pouvez utiliser ces étapes pour répliquer la base de données MySQL dans Ubuntu, Debian, CentOS, Fedora, Red Hat et d'autres types de Linux.


Comment répliquer la base de données MySQL

Voici les étapes pour répliquer la base de données MySQL. Pour notre configuration, nous aurons besoin d'une base de données maître (IP - 54.24.32.12) et d'une base de données esclave (IP - 45.12.21.23). Nous répliquerons la base de données nommée exampledb de maître à esclave. Nous avons supposé que MySQL était installé sur ces deux serveurs et que vous disposiez des privilèges root pour les deux. Sinon, vous pouvez installer MySQL avec la commande suivante

$ sudo apt-get install mysql-server mysql-client

Lecture bonus :meilleures alternatives MySQL Workbench


1. Modifier le fichier de configuration principal

Ouvrez le terminal sur le serveur de la base de données principale et exécutez la commande suivante

$ sudo vi /etc/mysql/my.cnf

Par défaut, les connexions à distance sont désactivées dans MySQL. Nous devons autoriser la connexion à distance de l'esclave au maître pour la réplication. Nous décommentons donc les deux lignes suivantes pour permettre les connexions à distance, en ajoutant # à leur début, comme indiqué ci-dessous

#skip-networking
#bind-address=127.0.0.1

Ajoutez ou décommentez les lignes suivantes dans le bloc [mysqld] pour ressembler à ce qui suit.

[mysqld]
server-id=1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb

Examinons chacune des lignes ci-dessus. La première ligne server-id spécifie un numéro d'identification unique pour le maître. Il doit s'agir d'un nombre positif compris entre 1 et 2^32.

log-bin spécifie l'emplacement du fichier journal qui sera rempli par MySQL avec les détails de la réplication.

binlog-do-db indique le nom de la base de données qui doit être répliquée.

Redémarrez le serveur MySQL pour appliquer les modifications

$ sudo service mysql restart

Connectez-vous à MySQL en tant qu'utilisateur root

$ sudo mysql -u root -p

et exécutez la commande suivante

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 |   exampledb  |                  |
+------------------+----------+--------------+------------------+

Veuillez noter les détails ci-dessus, nous en aurons besoin plus tard à l'étape 3.

Lecture bonus :Comment activer SSL/TLS dans MySQL


2. Créer un utilisateur de réplication

Connectez-vous au serveur MySQL sur le maître.

$ sudo mysql -u root -p

Vous serez invité à entrer le mot de passe root.

Après vous être connecté à MySQL, exécutez les commandes suivantes pour créer un utilisateur distant slave_user et accordez-lui des autorisations de réplication pour toutes les bases de données. Veuillez remplacer 45.12.21.23 ci-dessous par l'adresse IP de votre serveur esclave et remplacer $password par un mot de passe approprié selon vos besoins.

mysql> CREATE USER slave_user@45.12.21.23; 
mysql> GRANT REPLICATION SLAVE ON *.* TO slave_user@45.12.21.23
       IDENTIFIED BY '$password';
mysql> FLUSH PRIVILEGES;

Veuillez ajouter une règle de pare-feu entrant pour le port 3306 et autoriser 45.12.21.23. Cet utilisateur distant doit se connecter à la base de données principale pour que la réplication se produise.

Lecture bonus :comment modifier le classement de toutes les tables dans MySQL


3. Modifier le fichier de configuration esclave

Ouvrez le terminal sur le serveur de la base de données esclave et exécutez la commande suivante

$ sudo vi /etc/mysql/my.cnf

Ajoutez les lignes suivantes sous [mysqld] pour ressembler à

[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = exampledb

Dans la première ligne, nous attribuons l'ID de serveur 2 au serveur esclave. Les deux lignes suivantes spécifient les emplacements des journaux de relais et des fichiers journaux de réplication. La dernière ligne spécifie la base de données à répliquer.

Redémarrez le serveur MySQL et connectez-vous à MySQL

$ sudo service mysql restart
$ sudo mysql -u root -p

Exécutez les commandes suivantes pour créer une base de données vide sur l'esclave.

mysql> CREATE DATABASE exampledb; 
mysql> USE exampledb;

Charger les données de la base de données maître pour remplir la base de données esclave

mysql> LOAD DATA FROM MASTER;

Quittez MySQL.

Lecture bonus :meilleurs blogs de base de données à suivre


4. Initialiser la réplication

Lorsque vous êtes connecté à MySQL, exécutez les commandes suivantes pour lancer le processus de réplication. Remplacer les pièces en gras avec vos valeurs.

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST='54.24.32.12',
       MASTER_USER='slave_user', 
       MASTER_PASSWORD='<password>', 
       MASTER_LOG_FILE='mysql-bin.000001', 
       MASTER_LOG_POS=107;

MASTER_HOST – Adresse IP ou nom d'hôte du maître (54.24.32.12).
MASTER_USER - utilisateur esclave que nous avons créé à l'étape 2.
MASTER_PASSWORD - mot de passe de l'utilisateur esclave que nous avons créé à l'étape 2.
MASTER_LOG_FILE - fichier que MySQL a rendu à l'étape 1 lorsque vous avez exécuté
AFFICHER LE STATUT MAÎTRE
MASTER_LOG_POS - position que MySQL a rendue lorsque vous avez exécuté SHOW MASTER STATUS à l'étape 1

Enfin, nous démarrons l'esclave pour commencer la réplication de la base de données MySQL.

mysql> START SLAVE;

Espérons que cet article vous aidera à répliquer la base de données MySQL.