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

Réplication de maître à maître MySQL

La réplication est utilisée pour maintenir la synchronisation de deux bases de données ou plus en répliquant les modifications DML/instructions ou d'ensemble de données exécutées d'un serveur maître vers un ou plusieurs serveurs esclaves.

Il existe trois méthodes de journalisation des données pour la réplication :La réplication basée sur les instructions (SBR) réplique les instructions SQL qui modifient les données. La réplication basée sur les lignes (RBR) réplique uniquement les lignes modifiées. La réplication mixte (MBR) est une réplication basée sur les instructions et la réplication basée sur les lignes. Auparavant, pour toutes les versions de mysqld, la réplication basée sur les instructions était la méthode par défaut de déconnexion. La plupart des moteurs de stockage prennent en charge les trois approches de journalisation des données.

La réplication MySQL Master-Master fait évoluer le système et améliore les performances en réduisant la surcharge de la sauvegarde et en fournissant une redondance pour l'application active. Si vous n'obtenez pas ce que c'est, c'est comme si deux serveurs MySQL se tenaient mutuellement à jour. Avec la réplication, deux serveurs MySQL distincts agissent comme un cluster. Le clustering de bases de données est principalement adapté aux configurations d'applications à haute disponibilité

La réplication maître/maître est obtenue en configurant le ServeurA comme esclave du ServeurB et en configurant le ServeurB comme esclave du ServeurA.

Hypothèse : Cet article ne fournit pas les étapes d'installation du serveur MySQL, je suppose que le serveur Mysql (instance unique) a été installé sur les deux serveurs :

Pour configurer un maître MySQL pour maîtriser la réplication sur les serveurs Linux, nous avons besoin de deux serveurs, les informations sont les suivantes :

serveur A :192.168.1.2

serveur B : 192.168.1.3

SE : BRH 6.4 x86_64

Serveur MySQL : 5.6.17x86_64

Prévérifications :

Désactivez le pare-feu sur les deux serveurs :

service iptables stop
chkconfig iptables off
service iptables status

Les deux serveurs doivent être accessibles l'un à l'autre, afin de vérifier le ping d'accessibilité de chaque serveur.

Commentez l'attribut bind-address ou définissez-le sur (bind-address=0.0.0.0) dans le fichier my.sandbox.cnf ou my.cnf sur les deux serveurs. J'ai mentionné my.sandbox.cnf, ceci au cas où vous utiliseriez MySQL::Sandbox

Tout d'abord, nous allons activer la réplication du serveur B vers A

ÉTAPE 1 :
SUR le serveur A :192.168.1.2

éditez my.sandbox.cnf ou my.cnf et ajoutez les valeurs ci-dessous server-id doit être> 0 ; au cas où vous ne connaissez pas l'emplacement du fichier my.cnf, utilisez cette commande sur os shell "mysql –help | grep my.cnf", généralement my.cnf se trouve dans le répertoire /etc/

server-id=1
replicate-same-server-id=0
auto-increment-increment=2
auto-increment-offset=1
relay-log=serverA-relay-bin
relay-log-index=serverA-relay-bin.index
master-info-file=mysqk-master.info
relay-log-info-file=serverA-relay-log.info
log-bin=mysql-bin

SUR le serveur B :192.168.1.3

éditez my.sandbox.cnf ou my.cnf et ajoutez les valeurs ci-dessous server-id doit être> 0 ;

server-id=2
replicate-same-server-id=0
auto-increment-increment=2
auto-increment-offset=2
relay-log=serverB-relay-bin
relay-log-index=serverB-relay-bin.index
master-info-file=mysqk-master.info
relay-log-info-file=serverB-relay-log.info
log-bin=mysql-bin

ÉTAPE 2 :
SUR le serveur A :192.168.1.2
create user 'syncstndby' identified by 'warsaw';
grant replication slave on *.* to 'syncstndby'@'192.168.1.3'  identified by 'warsaw';
flush privileges;
Sur le serveur B :192.168.1.3
create user 'syncstndby' identified by 'warsaw';
grant replication slave on *.* to 'syncstndby'@'192.168.1.2'  identified by 'warsaw';
flush privileges;
ÉTAPE 3 :
SUR LE SERVEUR B :192.168.1.3
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 5617 |
+---------------+-------+
1 row in set (0.00 sec)


mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      423 | |             | |
+------------------+----------+--------------+------------------+-------------------+

SUR LE SERVEUR A :192.168.1.2
CHANGE MASTER TO 
MASTER_HOST='192.168.1.3',
MASTER_USER='syncstndby',
MASTER_PASSWORD='warsaw',
MASTER_PORT= 5617, 
MASTER_LOG_FILE='mysql-bin.000002',  
MASTER_LOG_POS=423; 

Maintenant, vous allez penser d'où je choisis les valeurs pour ces attributs, ne vous inquiétez pas, je l'explique, choisissez la valeur MASTER_PORT de la requête ci-dessus (AFFICHER LES VARIABLES GLOBALES COMME 'PORT') dans ce cas, notre port est 5617 , Choisissez la valeur MASTER_LOG_FILE de la colonne File dans la requête ci-dessus ("show master status ;") c'est-à-dire Mysql-bin.000002), Choisissez la valeur MASTER_LOG_POS de la position de la colonne dans la requête ci-dessus qui est 423)

ÉTAPE 4 :

Vous pouvez maintenant démarrer l'esclave

mysql>start salve:
mysql> show slave status \G;

MAINTENANT la réplication de B vers A a été activée

ÉTAPE 5 

Dans cette étape, nous allons tester la réplication du serveur B vers A :

SUR LE MAITRE (serveur B) :192.168.1.3
show schemas;
create database reptest;
create table reptest.simples (id int not null primary key) ;
insert into reptest.simples values (999),(1),(2),(3);
SUR ESCLAVE :192.168.1.2 (serveur A)
show schemas;
use reptest;
select * from reptest.simples;

Nous allons maintenant activer la réplication du serveur A vers B

ÉTAPE 6 :
SUR LE SERVEUR A :192.168.1.2
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 5617 |
+---------------+-------+
1 row in set (0.00 sec)

mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      120 | |             | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

SUR LE SERVEUR B :192.168.1.3
CHANGE MASTER TO 
MASTER_HOST='192.168.1.2',
MASTER_USER='syncstndby',
MASTER_PASSWORD='warsaw',
MASTER_PORT= 5617, 
MASTER_LOG_FILE='mysql-bin.000004', 
MASTER_LOG_POS=120; 

Choisissez la valeur MASTER_PORT dans la requête ci-dessus (AFFICHER LES VARIABLES GLOBALES COMME 'PORT') dans ce cas, notre port est 5617, Choisissez la valeur MASTER_LOG_FILE dans la colonne Fichier dans la requête ci-dessus ("afficher le statut principal ;") c'est-à-dire Mysql-bin .000004), Choisissez la valeur MASTER_LOG_POS à partir de la position de la colonne dans la requête ci-dessus qui est 120)

Vous pouvez maintenant démarrer l'esclave

mysql> show slave status \G;
mysql>start salve:
mysql> show slave status \G;

ÉTAPE 7

OK donc notre environnement est défini, maintenant nous allons tester si notre environnement fonctionne ou non.

SUR 192.168.1.2 (serveur A)
insert into reptest.simples values (777),(41),(15),(61);

Ici, nous n'avons pas créé la table simple dans le nom de la base de données reptest car elle était déjà répliquée sur le serveur A lors de la création de la base de données reptest et de la table sur le serveur B.

SUR 192.168.1.3  (Serveur B)
use reptest;
select * from reptest.simples;

Hourra!! vous pouvez voir que tout est défini et que notre réplication de maître à maître est définie.

AVERTISSEMENT : Ce n'est pas intelligent d'avoir votre application exécutant DML sur les deux serveurs en même temps. L'écriture simultanée sur les deux serveurs permet un basculement rapide raisonnablement durable pour une haute disponibilité, mais n'apporte aucun gain de performances. Les deux serveurs doivent effectuer tout le DML, que le DML provienne directement des clients ou via la réplication