GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer la réplication MySQL maître-maître

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 =1  

Serveur B

[[email protected] ~]# vi /etc/my.cnf
 server-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 =2  

Assurez-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 mysqld

Serveur 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 systemctl

Serveur 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/

Linux
  1. Configuration de la réplication maître-maître avec MySQL sur Debian 8 (Jessie)

  2. Comment configurer Pure-FTPD avec MySQL sur CentOS et RedHat

  3. Comment configurer LogAnalyzer avec Rsyslog et MySQL

  4. Comment configurer la réplication MySQL sur CentOS

  5. Comment configurer la réplication maître-esclave MariaDB sur Ubuntu 18.04

Comment configurer la réplication CouchDB sur Ubuntu 16.04

Comment configurer MySQL avec Docker sous Linux

Comment configurer le dernier MySQL sur Ubuntu 20.04 LTS

Comment configurer la réplication MySQL dans RHEL/Centos

Comment configurer une connexion MySQL distante sécurisée

Comment configurer la réplication maître-esclave MySQL sur RHEL 7 ?