Cet article consolide les informations de plusieurs sources dans le format que j'utilise pour configurer MySQL Master/Master Replication. La beauté de Linux et de l'open source est qu'il existe de nombreuses façons différentes de le faire. Veuillez consulter mes références et les utiliser pour répondre à tous vos besoins. Si vous avez des questions ou rencontrez des problèmes, n'hésitez pas à m'écrire dans les commentaires.
Hypothèses
Cet article suppose que vous avez déjà installé MySQL sur chacun de vos serveurs. Sinon, vous pouvez facilement le faire via le site Web de MySQL à l'adresse https://www.mysql.org/downloads. Cet article n'a pas été testé sur MariaDB mais devrait fonctionner si vous préférez utiliser MariaDB.
Changer SELINUX en permissif (si installé)
Serveur A
[[email protected] ~]# vi /etc/selinux/config
# Ce fichier contrôle l'état de SELinux sur le système.# SELINUX=peut prendre l'une de ces trois valeurs :# enforcing - La politique de sécurité de SELinux est appliquée.# permissive - SELinux affiche des avertissements au lieu de les appliquer.# disabled - No SELinux la politique est chargée. SELINUX=permissif# SELINUXTYPE=peut prendre l'une de ces deux valeurs :# ciblé - Les processus ciblés sont protégés,# mls - Protection de sécurité à plusieurs niveaux.SELINUXTYPE=ciblé
Serveur B
[[email protected] ~]# vi /etc/selinux/config
# Ce fichier contrôle l'état de SELinux sur le système.# SELINUX=peut prendre l'une de ces trois valeurs :# enforcing - La politique de sécurité de SELinux est appliquée.# permissive - SELinux affiche des avertissements au lieu de les appliquer.# disabled - No SELinux la politique est chargée. SELINUX=permissif# SELINUXTYPE=peut prendre l'une de ces deux valeurs :# ciblé - Les processus ciblés sont protégés,# mls - Protection de sécurité à plusieurs niveaux.SELINUXTYPE=ciblé
Arrêter et désactiver firewalld sur chaque serveur
Serveur A
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld
Exécutez la commande suivante pour vous assurer qu'il n'y a pas de règles de pare-feu
[[email protected] ~]# iptables -L
Le résultat devrait ressembler à :
Chaîne INPUT (politique ACCEPTER)
cible prot opt source destination
Chaîne FORWARD (politique ACCEPTER)
cible prot opt source destination
Chaîne OUTPUT (règle ACCEPTER)
cible prot opt source destination
Serveur B
[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld
Exécutez la commande suivante pour vous assurer qu'il n'y a pas de règles de pare-feu.
[[email protected] ~]# iptables -L
Le résultat devrait ressembler à :
Chaîne INPUT (politique ACCEPTER)
cible prot opt source destination
Chaîne FORWARD (politique ACCEPTER)
cible prot opt source destination
Chaîne OUTPUT (règle ACCEPTER)
cible prot opt source destination
Modifier /etc/my.cnf sur les deux serveurs
Ajoutez les informations suivantes au bas de la section [mysqld]
Serveur A
[[email protected] ~]# vi /etc/my.cnf
server-id=1 log-bin="mysql-bin" binlog-do-db=name_of_database replica-do-db=name_of_database relay-log="mysql-relay-log" auto-increment-offset =1Serveur B
[[email protected] ~]# vi /etc/my.cnfserver-id=2 log-bin="mysql-bin" binlog-do-db=name_of_database replica-do-db=name_of_database relay-log="mysql-relay-log" auto-increment-offset =2Assurez-vous de remplacer name_of_database par le nom de la base de données que vous souhaitez répliquer
Redémarrer et activer le démon MySQL sur chaque serveur
Serveur A
[[email protected] ~]# systemctl redémarre mysqld[[email protected] ~]# systemctl enable mysqldServeur B
[[email protected] ~]# systemctl redémarre mysqld[[email protected] ~]# systemctl enable mysqld
Créer l'utilisateur du réplicateur sur chaque serveur
[[email protected] ~]# mysql -u root -p
mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me' ;
mysql> GRANT REPLICATION ESCLAVE SUR foo.* TO 'réplicateur'@'%'[[email protected] ~]# mysql -u root -p
mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me' ;
mysql> GRANT REPLICATION ESCLAVE SUR foo.* TO 'réplicateur'@'%'
Obtenir les informations du fichier journal à utiliser sur l'autre serveur
Serveur A
[[email protected] ~]# mysql -u root -p
mysql> AFFICHER L'ÉTAT MAITRE ;
+---------- --------+----------+-------------+----------- -------+
| Fichier | Poste | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+------------- -----+------------------+
| mysql-bin.000001 | 154 | nom_de_base_de_données | |
+-------------+----------+---------------------- ----+------------------+
1 ligne dans le jeu (0,00 sec)Notez le "Fichier" et la "Position" de cette commande
Serveur B
[[email protected] ~]# mysql -u root -p
mysql> STOP SLAVE ;
mysql> CHANGE MASTER TO MASTER_HOST ='Server A IP Address ou HOSTNAME',MASTER_USER ='replicator', MASTER_PASSWORD ='change_me', MASTER_LOG_FILE ='mysql-bin.000001', MASTER_LOG_POS =154;
mysql> START SLAVE;Répétez les mêmes étapes sur le serveur B
Serveur B
[[email protected] ~]# mysql -u root -p mysql> AFFICHER LE STATUT MAITRE ;
+------------------ +----------+------------------+------------------+
| Fichier | Poste | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+------------- -----+------------------+
| mysql-bin.000001 | 154 | nom_de_base_de_données | |
+-------------+----------+---------------------- ----+------------------+
1 ligne dans le jeu (0,00 sec)Notez le "Fichier" et la "Position" de cette commande
Serveur A
[[email protected] ~]# mysql -u root -p
mysql> STOP SLAVE ; CHANGE MASTER TO MASTER_HOST ='Adresse IP du serveur B ou HOSTNAME', MASTER_USER ='replicator', MASTER_PASSWORD ='passw0rd', MASTER_LOG_FILE ='mysql-bin.000001', MASTER_LOG_POS =154 ;
mysql> DÉMARRER L'ESCLAVE ;
Redémarrer les deux serveurs
Serveur A
[[email protected] ~]# redémarrage systemctlServeur B
[[email protected] ~]# redémarrage systemctl
Sur l'un ou l'autre serveur, créez votre base de données
[[email protected] ~]# mysql -u root -p
mysql> CRÉER UNE BASE DE DONNÉES foo ;
Sur l'autre serveur, vérifiez que la base de données est là
[[email protected] ~]# mysql -u root -p
mysql> AFFICHER LES BASES DE DONNÉES ;
+--------------------+
| Base de données |
+--------------------+
| information_schema |
| truc |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 lignes dans l'ensemble (0,00 s)
Sources
- https://www.howtoforge.com/mysql_database_replication
- https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication
- https://www.howtoforge.com/mysql_master_master_replication
- http://www.ryadel.com/en/mysql-master-master-replication-setup-in-5-easy-steps/