« MariaDB - Réplication master-master » : différence entre les versions

De Wiki doc

(Page créée avec « Category:Base de données La réplication maître-maître (master-master) est une façon relativement simple d'avoir deux SGBD synchronisées via le réseau et donc id... »)
 
(Modification du mot d'exemple pour le mot de passe de la réplication sur les deux nœuds + ajout du "reset master;" dans la réinitialisation de la réplication + a&ration du code.)
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 27 : Ligne 27 :


'''Commenter''' ''(ligne 29)''
'''Commenter''' ''(ligne 29)''
bind-address          = 127.0.0.1
<source lang="ini">
bind-address          = 127.0.0.1
</source>
 
'''Dé-commenter''' ''(ligne 74)''
'''Dé-commenter''' ''(ligne 74)''
server-id              = 1
<source lang="ini">
server-id              = 1
</source>
 
'''Dé-commenter''' ''(ligne 75)''
'''Dé-commenter''' ''(ligne 75)''
log_bin                = /var/log/mysql/mysql-bin.log
<source lang="ini">
log_bin                = /var/log/mysql/mysql-bin.log
</source>


'''Redémarrer le service'''
'''Redémarrer le service'''
Ligne 39 : Ligne 47 :
Se connecter à ''MariaDB'' en root
Se connecter à ''MariaDB'' en root
  mysql -u root -proot
  mysql -u root -proot
''Depuis peu, MariaDB ne configure plus de mot de passe par défaut pour la connexion root SQL lorsque l'on est connecté en tant que root POSIX. On peut donc mettre n'importe quoi comme mot de passe et ça fonctionne. Par contre, il est impossible de s'y connecté depuis un autre utilisateur (il faudra configurer un mot de passe root SQL pour ce faire).''
''Depuis peu, MariaDB ne configure plus de mot de passe par défaut pour la connexion root SQL lorsque l'on est connecté en tant que root POSIX. On peut donc mettre n'importe quoi comme mot de passe et ça fonctionne. Par contre, il est impossible de s'y connecté depuis un autre utilisateur (il faudra configurer un mot de passe root SQL pour ce faire).''


'''Créer un utilisateur dédié à la réplication'''
'''Créer un utilisateur dédié à la réplication'''
GRANT replication slave on *.* to 'replica'@'%' identified by 'replica';
<source lang="sql">
GRANT replication slave on *.* to 'replica'@'%' identified by 'replica';
</source>
 
''Cet utilisateur n'a que les droits de réplication et ceux, sur toute les bases de données''.
''Cet utilisateur n'a que les droits de réplication et ceux, sur toute les bases de données''.


'''Arrêter le mode esclave'''
'''Arrêter le mode esclave'''
stop slave;
<source lang="sql">
stop slave;
</source>
 
'''Récupérer les informations à donner au nœud 2'''
'''Récupérer les informations à donner au nœud 2'''
show master status;
<source lang="sql">
show master status;
</source>


  +------------------+----------+--------------+------------------+
  +------------------+----------+--------------+------------------+
Ligne 56 : Ligne 73 :
  +------------------+----------+--------------+------------------+
  +------------------+----------+--------------+------------------+
Ce qui est important dans ce qui s'affiche, c'est '''File''' et '''Position'''. Ce sont ces deux informations qui seront entrées dans le noeud 2. Pour notre part, nous allons entrer celles du nœud 2 dans notre nœud 1.
Ce qui est important dans ce qui s'affiche, c'est '''File''' et '''Position'''. Ce sont ces deux informations qui seront entrées dans le noeud 2. Pour notre part, nous allons entrer celles du nœud 2 dans notre nœud 1.
CHANGE MASTER TO MASTER_HOST='noeud2', MASTER_USER='replica', MASTER_PASSWORD='replica', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=497;
 
<source lang="sql">
CHANGE MASTER TO MASTER_HOST='noeud2', MASTER_USER='replica', MASTER_PASSWORD='METTRE_VOTRE_MOT_DE_PASSE', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=497;
</source>


{{attention|À ce stade, il faut attendre que le nœud 2 ai changé son ''server_id'' (cette étape est expliqué plus loin). Une fois ceci fait, vous pouvez continuer. Si vous taper la commande <source lang="bash" inline>start slave;</source> avant ce pré-requis, le paramètre '''Slave_IO_Running:''' sera à '''No''' au lieu de '''Yes'''. Pour corriger ça après coup, il faudra faire un <source lang="bash" inline>stop slave;</source> suivi d'un <source lang="bash" inline>start slave;</source> après le changement indiqué sur le nœud 2.}}
{{attention|À ce stade, il faut attendre que le nœud 2 ai changé son ''server_id'' (cette étape est expliqué plus loin). Une fois ceci fait, vous pouvez continuer. Si vous taper la commande <source lang="bash" inline>start slave;</source> avant ce pré-requis, le paramètre '''Slave_IO_Running:''' sera à '''No''' au lieu de '''Yes'''. Pour corriger ça après coup, il faudra faire un <source lang="bash" inline>stop slave;</source> suivi d'un <source lang="bash" inline>start slave;</source> après le changement indiqué sur le nœud 2.}}


'''Démarrer l'esclave'''
'''Démarrer l'esclave'''
start slave;
<source lang="sql">
start slave;
</source>
 
'''Afficher le statut de l'appairage'''
'''Afficher le statut de l'appairage'''
show slave status\G
<source lang="sql">
show slave status\G
</source>
 
<source lang="sql">
<source lang="sql">
*************************** 1. row ***************************
*************************** 1. row ***************************
Ligne 134 : Ligne 160 :
'''Éditer le fichier de configuration serveur'''
'''Éditer le fichier de configuration serveur'''
  vim /etc/mysql/mariadb.conf.d/50-server.cnf
  vim /etc/mysql/mariadb.conf.d/50-server.cnf
'''Commenter''' ''(ligne 29)''
'''Commenter''' ''(ligne 29)''
bind-address          = 127.0.0.1
<source lang="ini">
bind-address          = 127.0.0.1
</source>
 
'''Dé-commenter''' ''(ligne 74)''
'''Dé-commenter''' ''(ligne 74)''
server-id              = 1
<source lang="ini">
server-id              = 1
</source>
 
'''Dé-commenter''' ''(ligne 75)''
'''Dé-commenter''' ''(ligne 75)''
log_bin                = /var/log/mysql/mysql-bin.log
<source lang="ini">
log_bin                = /var/log/mysql/mysql-bin.log
</source>


'''Redémarrer le service'''
'''Redémarrer le service'''
Ligne 147 : Ligne 182 :
Se connecter à ''MariaDB'' en root
Se connecter à ''MariaDB'' en root
  mysql -u root -proot
  mysql -u root -proot
'''Créer un utilisateur dédié à la réplication'''
'''Créer un utilisateur dédié à la réplication'''
GRANT replication slave on *.* to 'replica'@'%' identified by 'replica';
<source lang="sql">
GRANT replication slave on *.* to 'replica'@'%' identified by 'replica';
</source>
 
'''Arrêter le mode esclave'''
'''Arrêter le mode esclave'''
stop slave;
<source lang="sql">
stop slave;
</source>
 
'''Récupérer les informations à donner au nœud 1'''
'''Récupérer les informations à donner au nœud 1'''
show master status;
<source lang="sql">
show master status;
</source>


  +------------------+----------+--------------+------------------+
  +------------------+----------+--------------+------------------+
Ligne 162 : Ligne 206 :
C'est à ce moment là que nous récupérons les informations du nœud 1 pour les mettre dans notre requête de réplication sur le nœud 2
C'est à ce moment là que nous récupérons les informations du nœud 1 pour les mettre dans notre requête de réplication sur le nœud 2


CHANGE MASTER TO MASTER_HOST='noeud1', MASTER_USER='replica', MASTER_PASSWORD='replica', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=497;
<source lang="sql">
CHANGE MASTER TO MASTER_HOST='noeud1', MASTER_USER='replica', MASTER_PASSWORD='METTRE_VOTRE_MOT_DE_PASSE', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=497;
</source>


Afin de prévenir l'erreur suivante:
Afin de prévenir l'erreur suivante:
Ligne 169 : Ligne 215 :


'''Afficher le ''server_id'' actuel'''
'''Afficher le ''server_id'' actuel'''
show variables like 'server_id';
<source lang="sql">
show variables like 'server_id';
</source>


  +---------------+-------+
  +---------------+-------+
Ligne 176 : Ligne 224 :
  | server_id    | 1    |
  | server_id    | 1    |
  +---------------+-------+
  +---------------+-------+
'''Changer cette valeur'''
'''Changer cette valeur'''
set global server_id=2;
<source lang="sql">
set global server_id=2;
</source>


'''Démarrer l'esclave'''
'''Démarrer l'esclave'''
start slave;
<source lang="sql">
start slave;
</source>


Une fois ceci fait sur les deux nœud, un
Une fois ceci fait sur les deux nœud, un
show slave status\G
<source lang="sql">
show slave status\G
</source>
 
affichera:
affichera:
<source lang="sql">
<source lang="sql">
Ligne 235 : Ligne 291 :
                 Parallel_Mode: conservative
                 Parallel_Mode: conservative
</source>
</source>
{{info|Ce qui est important ce sont les '''Slave_IO_Running: Yes''' et '''Slave_SQL_Running: Yes'''. Si il sont à '''No''' (ou l'un des deux), c'est que vous êtes dans le cas chelou qui fait que ça ne fonctionne pas (ce n'est peu être pas de votre faute car comme dit au début, la mise en place est parfois assez hasardeuse). Ne lâchez rien, on fini toujours par trouver.}}
{{info|Ce qui est important ce sont les '''Slave_IO_Running: Yes''' et '''Slave_SQL_Running: Yes'''. Si il sont à '''No''' (ou l'un des deux), c'est que vous êtes dans le cas chelou qui fait que ça ne fonctionne pas (ce n'est peu être pas de votre faute car comme dit au début, la mise en place est parfois assez hasardeuse). Ne lâchez rien, on fini toujours par trouver.}}


Ligne 241 : Ligne 298 :


Pour ma part, je test ceci avec une table ''toto'' sur le nœud 1:
Pour ma part, je test ceci avec une table ''toto'' sur le nœud 1:
<source lang="sql">
<source lang="sql">
CREATE DATABASE toto;
CREATE DATABASE toto;
SHOW DATABASES;
SHOW DATABASES;
</source>
</source>
  +--------------------+
  +--------------------+
  | Database          |
  | Database          |
Ligne 253 : Ligne 312 :
  | toto              |
  | toto              |
  +--------------------+
  +--------------------+
Que j'affiche sur le nœud 2
Que j'affiche sur le nœud 2
<source lang="sql">
<source lang="sql">
SHOW DATABASES;
SHOW DATABASES;
</source>
</source>
  +--------------------+
  +--------------------+
  | Database          |
  | Database          |
Ligne 269 : Ligne 331 :
DROP DATABASE toto;
DROP DATABASE toto;
</source>
</source>
et je reviens sur le nœud 1 pour vérifier la suppression
et je reviens sur le nœud 1 pour vérifier la suppression
<source lang="sql">
<source lang="sql">
SHOW DATABASES;
SHOW DATABASES;
</source>
</source>
  +--------------------+
  +--------------------+
  | Database          |
  | Database          |
Ligne 280 : Ligne 345 :
  | performance_schema |
  | performance_schema |
  +--------------------+
  +--------------------+
Si tout fonctionne, votre réplication est prête à accueillir votre production. Gardez bien à l'esprit qu''''une réplication''', à l'image d'un RAID1, '''n'est en rien une sauvegarde !''' Si une catastrophe (piratage, suppression malencontreuse...) se produit, elle se répliquera elle aussi. Ceci ne vous dispenses donc pas d'une sauvegarde régulière. '''La réplication est là pour assurer une haute disponibilité des informations, pas leur intégrité.'''
Si tout fonctionne, votre réplication est prête à accueillir votre production. Gardez bien à l'esprit qu''''une réplication''', à l'image d'un RAID1, '''n'est en rien une sauvegarde !''' Si une catastrophe (piratage, suppression malencontreuse...) se produit, elle se répliquera elle aussi. Ceci ne vous dispenses donc pas d'une sauvegarde régulière. '''La réplication est là pour assurer une haute disponibilité des informations, pas leur intégrité.'''


=Désactiver complètement la réplication=
=Désactiver complètement la réplication=
Si vous n'avez plus besoin de la réplication mise en œuvre dans cette documentation ou que vous rencontrez des difficultés et que vous voulez recommencer depuis une base propre. Vous pouvez désactiver les opérations effectués avec ceci sur les deux nœuds:
Si vous n'avez plus besoin de la réplication mise en œuvre dans cette documentation ou que vous rencontrez des difficultés et que vous voulez recommencer depuis une base propre. Vous pouvez désactiver les opérations effectués avec ceci sur les deux nœuds:
<source lang="sql">
stop slave;
reset slave;
reset master;
quit
</source>
systemctl restart mariadb.service
=Résolution de problèmes=
On ne m’enlèvera pas de l'idée que Mysql/MariaDB est un produit un peu bancale. Si vous rencontrez un problème quelque part. Le mieux est de tout recommencer de zéro.
'''Stopper l'esclave'''
  stop slave;
  stop slave;
'''Réinitialiser l'esclave'''
  reset slave;
  reset slave;
  quit
 
systemctl restart mariadb.service
'''Réinitialiser le maître'''
  reset master;
 
Ensuite il faut reprendre les étapes à partir de la création de l'utilisateur ''replica'', se dernier ayant été supprimé par le <source lang="mysql" inline>reset master;</source> et poursuivre la procédure depuis là. Je vous conseil de supprimer la base de donnée sur l'un des nœuds et de la recréer/réinjecter à la main avant d'activer la réplication pour repartir sur une bonne base.
 
{{info|Si une de vos machine de réplication est injoignable pendant une certaine durée (que nous n'avons pas déterminé) et qu'un nombre concéquent de modifications a été apporté à l'autre nœud, la réplication ne voudra plus se faire (ce serai trop simple). Il faudra donc tout recommencer depuis la début.}}
 
=Sources=
=Sources=
* https://www.youtube.com/watch?v=XTIXeiWPE10
* https://www.youtube.com/watch?v=XTIXeiWPE10
* http://niutuku.com/tech/Mysql/237830.shtml
* http://niutuku.com/tech/Mysql/237830.shtml
* https://dba.stackexchange.com/questions/21119/how-do-i-completely-disable-mysql-replication
* https://dba.stackexchange.com/questions/21119/how-do-i-completely-disable-mysql-replication

Dernière version du 5 novembre 2020 à 18:36

La réplication maître-maître (master-master) est une façon relativement simple d'avoir deux SGBD synchronisées via le réseau et donc identiques.

C'est cette technologie qui est utilisée pour permettre la redondance entre nos deux Wiki: https://doc.ycharbi.fr et https://doc.lesmorin.fr. Elle est beaucoup plus fiable que Galera car bien que certains trucs chelous puissent apparaître lors de l'installation, une fois en place, c'est béton (contrairement à ce dernier).

Nous partons du postula que nous avons deux serveurs à synchroniser. À quelques choses près, les mêmes actions sont à effectuées sur les deux nœuds.

Sur le nœud 1

Afin d'être indifférent face à un éventuel changement d'adresse IP, je vous conseils d'utiliser un nom d'hôte plutôt qu'une IP pour mettre en place la synchronisation. Après, vous êtes libres de vous torcher avec mon conseil... Pour ma part, j'utilise ceci:

vim /etc/hosts
192.168.1.201	noeud1
192.168.1.202	noeud2

Tester la connectivité

ping noeud1
ping noeud2

Installation

apt install mariadb-server

Configuration

Fichier de configuration

Éditer le fichier de configuration serveur

vim /etc/mysql/mariadb.conf.d/50-server.cnf

(son emplacement et son nom changent à chaque versions, adaptez-vous à votre époque...)

Commenter (ligne 29)

bind-address          = 127.0.0.1

Dé-commenter (ligne 74)

server-id               = 1

Dé-commenter (ligne 75)

log_bin                 = /var/log/mysql/mysql-bin.log

Redémarrer le service

systemctl restart mariadb.service

Requêtes de synchronisation

Se connecter à MariaDB en root

mysql -u root -proot

Depuis peu, MariaDB ne configure plus de mot de passe par défaut pour la connexion root SQL lorsque l'on est connecté en tant que root POSIX. On peut donc mettre n'importe quoi comme mot de passe et ça fonctionne. Par contre, il est impossible de s'y connecté depuis un autre utilisateur (il faudra configurer un mot de passe root SQL pour ce faire).

Créer un utilisateur dédié à la réplication

GRANT replication slave on *.* to 'replica'@'%' identified by 'replica';

Cet utilisateur n'a que les droits de réplication et ceux, sur toute les bases de données.

Arrêter le mode esclave

stop slave;

Récupérer les informations à donner au nœud 2

show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      497 |              |                  |
+------------------+----------+--------------+------------------+

Ce qui est important dans ce qui s'affiche, c'est File et Position. Ce sont ces deux informations qui seront entrées dans le noeud 2. Pour notre part, nous allons entrer celles du nœud 2 dans notre nœud 1.

CHANGE MASTER TO MASTER_HOST='noeud2', MASTER_USER='replica', MASTER_PASSWORD='METTRE_VOTRE_MOT_DE_PASSE', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=497;

ATTENTION

À ce stade, il faut attendre que le nœud 2 ai changé son server_id (cette étape est expliqué plus loin). Une fois ceci fait, vous pouvez continuer. Si vous taper la commande start slave; avant ce pré-requis, le paramètre Slave_IO_Running: sera à No au lieu de Yes. Pour corriger ça après coup, il faudra faire un stop slave; suivi d'un start slave; après le changement indiqué sur le nœud 2.

Démarrer l'esclave

start slave;

Afficher le statut de l'appairage

show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: noeud2
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 497
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 292
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 497
              Relay_Log_Space: 591
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
      Replicate_Do_Domain_Ids: 
  Replicate_Ignore_Domain_Ids: 
                Parallel_Mode: conservative

Sur le nœud 2

Nous allons sensiblement effectuer les mêmes opérations à ceci prêt que nous changerons le server_id du nœud 2 afin d'éviter une erreur bloquante.

vim /etc/hosts
192.168.1.201	noeud1
192.168.1.202	noeud2

Tester la connectivité

ping noeud1
ping noeud2

Installation

apt install mariadb-server

Configuration

Fichier de configuration

Éditer le fichier de configuration serveur

vim /etc/mysql/mariadb.conf.d/50-server.cnf

Commenter (ligne 29)

bind-address          = 127.0.0.1

Dé-commenter (ligne 74)

server-id               = 1

Dé-commenter (ligne 75)

log_bin                 = /var/log/mysql/mysql-bin.log

Redémarrer le service

systemctl restart mariadb.service

Requêtes de synchronisation

Se connecter à MariaDB en root

mysql -u root -proot

Créer un utilisateur dédié à la réplication

GRANT replication slave on *.* to 'replica'@'%' identified by 'replica';

Arrêter le mode esclave

stop slave;

Récupérer les informations à donner au nœud 1

show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      497 |              |                  |
+------------------+----------+--------------+------------------+

C'est à ce moment là que nous récupérons les informations du nœud 1 pour les mettre dans notre requête de réplication sur le nœud 2

CHANGE MASTER TO MASTER_HOST='noeud1', MASTER_USER='replica', MASTER_PASSWORD='METTRE_VOTRE_MOT_DE_PASSE', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=497;

Afin de prévenir l'erreur suivante:

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

il faut configurer un server_id différent.

Afficher le server_id actuel

show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+

Changer cette valeur

set global server_id=2;

Démarrer l'esclave

start slave;

Une fois ceci fait sur les deux nœud, un

show slave status\G

affichera:

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: noeud1
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 497
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 537
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 497
              Relay_Log_Space: 836
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
      Replicate_Do_Domain_Ids: 
  Replicate_Ignore_Domain_Ids: 
                Parallel_Mode: conservative

INFORMATION

Ce qui est important ce sont les Slave_IO_Running: Yes et Slave_SQL_Running: Yes. Si il sont à No (ou l'un des deux), c'est que vous êtes dans le cas chelou qui fait que ça ne fonctionne pas (ce n'est peu être pas de votre faute car comme dit au début, la mise en place est parfois assez hasardeuse). Ne lâchez rien, on fini toujours par trouver.

Résultante et test

Si tout fonctionne comme prévu, la création d'une base de donnée, d'une table ou d'une entrée sur un des nœuds aura pour effet de se créer sur le deuxième, la suppression et la modification également.

Pour ma part, je test ceci avec une table toto sur le nœud 1:

CREATE DATABASE toto;
SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| toto               |
+--------------------+

Que j'affiche sur le nœud 2

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| toto               |
+--------------------+

et que je supprime sur celui-ci

DROP DATABASE toto;

et je reviens sur le nœud 1 pour vérifier la suppression

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

Si tout fonctionne, votre réplication est prête à accueillir votre production. Gardez bien à l'esprit qu'une réplication, à l'image d'un RAID1, n'est en rien une sauvegarde ! Si une catastrophe (piratage, suppression malencontreuse...) se produit, elle se répliquera elle aussi. Ceci ne vous dispenses donc pas d'une sauvegarde régulière. La réplication est là pour assurer une haute disponibilité des informations, pas leur intégrité.

Désactiver complètement la réplication

Si vous n'avez plus besoin de la réplication mise en œuvre dans cette documentation ou que vous rencontrez des difficultés et que vous voulez recommencer depuis une base propre. Vous pouvez désactiver les opérations effectués avec ceci sur les deux nœuds:

stop slave;
reset slave;
reset master;
quit
systemctl restart mariadb.service

Résolution de problèmes

On ne m’enlèvera pas de l'idée que Mysql/MariaDB est un produit un peu bancale. Si vous rencontrez un problème quelque part. Le mieux est de tout recommencer de zéro.

Stopper l'esclave

stop slave;

Réinitialiser l'esclave

reset slave;

Réinitialiser le maître

reset master;

Ensuite il faut reprendre les étapes à partir de la création de l'utilisateur replica, se dernier ayant été supprimé par le reset master; et poursuivre la procédure depuis là. Je vous conseil de supprimer la base de donnée sur l'un des nœuds et de la recréer/réinjecter à la main avant d'activer la réplication pour repartir sur une bonne base.

INFORMATION

Si une de vos machine de réplication est injoignable pendant une certaine durée (que nous n'avons pas déterminé) et qu'un nombre concéquent de modifications a été apporté à l'autre nœud, la réplication ne voudra plus se faire (ce serai trop simple). Il faudra donc tout recommencer depuis la début.

Sources