Version : 2022.01

Dernière mise-à-jour :

SER806 - Sauvegardes et Replication

Contenu du Module

SER806 - Sauvegardes et Réplication

Contenu du Module

Sauvegardes

mysqlhotcopy

mysqldump

Sauvegarder avec mysqldump

Restauration avec mysqldump

mariabackup

Réplication

Présentation

LAB #1 - Mise en Place de la Réplication Maître/Esclave

Création du compte de réplication

Création d'un clone de la VM

Configurer le maître

Configurer l'esclave

Contrôler la réplication

Sauvegardes

mysqlhotcopy

mysqlhotcopy est un script perl qui ne fonctionne que sous Linux. Ce script permet de prendre une copie à chaud d'une ou plusieurs bases de données.

[root@centos8 ~]# which mysqlhotcopy
/usr/bin/mysqlhotcopy

Pour exécuter le script en sauvegardant une base vers le répertoire /tmp, saisissez la commande suivante:

[root@centos8 ~]# mysqlhotcopy -u root -p fenestros1 ligue1 /tmp
Flushed 2 tables with read lock (`ligue1`.`equipe`, `ligue1`.`rencontre`) in 0 seconds.
Locked 1 views (`ligue1`.`V_EQUIPE`) in 0 seconds.
Copying 12 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 3 tables (12 files) in 0 seconds (0 seconds overall).

Consultez le répertoire /tmp:

[root@centos8 ~]# ls -l /tmp | grep ligue
drwxr-x---. 2 mysql mysql 249 Nov 9 08:29 ligue1

En effet mysqlhotcopy a créé un répertoire au nom de la base de données. A l'intérieur de ce répertoire, vous constaterez la présence des fichiers de la base de données:

[root@centos8 ~]# ls -l /tmp/ligue1/
total 64
-rw-rw----. 1 mysql mysql 65 Oct 31 10:19 db.opt
-rw-rw----. 1 mysql mysql 8818 Oct 31 11:12 equipe.frm
-rw-rw----. 1 mysql mysql 296 Nov 3 11:47 equipe.MYD
-rw-rw----. 1 mysql mysql 2048 Nov 3 11:51 equipe.MYI
-rw-rw----. 1 mysql mysql 297 Oct 31 11:05 equipe.TRG
-rw-rw----. 1 mysql mysql 8800 Oct 31 10:20 rencontre.frm
-rw-rw----. 1 mysql mysql 120 Nov 3 11:47 rencontre.MYD
-rw-rw----. 1 mysql mysql 2048 Nov 3 11:51 rencontre.MYI
-rw-rw----. 1 mysql mysql 603 Oct 31 11:07 rencontre.TRG
-rw-rw----. 1 mysql mysql 38 Oct 31 11:05 TGR_BI_EQUIPE.TRN
-rw-rw----. 1 mysql mysql 41 Oct 31 11:07 TGR_BU_RENCONTRE.TRN
-rw-rw----. 1 mysql mysql 971 Oct 31 11:14 V_EQUIPE.frm

mysqldump

Le client mysql vous permet de traiter des commandes SQL se trouvant dans un fichier. Pour cela lancez mysql de la manière suivante :

# mysql [options] database < file.sql

Toutes les commandes SQL contenues dans file.sql seront alors appliquées à la base de données spécifiée. Le fichier ne doit pas nécessairement se terminer par .sql – ce qui compte, c'est le contenu. Il faut absolument que les commandes soient délimitées par des points-virgules. Si vous le souhaitez, vous pouvez configurer un autre séparateur de commandes à l'aide de la commande DELIMITER. Cela s'avère nécessaire lorsque les fichiers SQL contient des commandes CREATE FUNCTION, PROCEDURE ou TRIGGER, qui contiennent des points-virgules.

Sauvegarder avec mysqldump

Mysqldump crée une sauvegarde d'une base de données. Le fichier de sauvegarde résultant contient des commandes SQL permettant de créer des tables et d'ajouter des données. La syntaxe de mysqldump est la suivante :

# mysqldump [option] dbname > backupfile.sql

Important - Les routines ne sont pas sauvegardées par défaut lors de l'utilisation de la commande mysqldump. Pour les sauvegarder il convient de passer l'option –routines à mysqldump.

Restauration avec mysqldump

Dans la pratique, vous rencontrerez souvent les fichiers *.sql comportant une sauvegarde de bases de données créée avec mysqldump. Pour lire ces fichiers, vous devez normalement créer la nouvelle base de données avec mysqladmin. Les deux commandes suivantes illustrent la procédure :

# mysqladmin -u root -p create dbname [Entrée]
Password : ********** [Entrée]

# mysql -u root -p dbname < backupfile.sql [Entrée]
Password : ********** [Entrée]

Les sauvegardes de base de données créées avec une version récente de mysqldump comporte des commandes SQL pour activer le jeu de caractères utilisé dans le fichier de sauvegarde. Ne vous préoccupez donc pas du jeu de caractères. Cette information manque dans les sauvegardes créées avec d'anciennes versions de mysqldump ou d'autres programmes comme phpMyadmin.

Important - Notez que les sauvegardes réalisées avec les versions récentes de phpMyadmin utilisent par défaut le jeu de caractères UTF-8.

Pour qu'une ancienne sauvegarde puisse être correctement lue, vous devez utiliser l'option –default-character-set= …. Si vous ne connaissez pas le jeu de caractères utilisés, saisissez latin1. Ce jeu de caractères était employé par défaut par les versions de MySQL 4.0 et antérieures.

Par exemple:

# mysql –u –root –p –default_character_set=latin1 dbname < backup.sql [Entrée]

Mariabackup

Installez le dépôt de Mariabackup :

[root@centos8 ~]# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
# [info] Checking for script prerequisites.
# [info] MariaDB Server version 10.9 is valid
# [info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
# [info] Adding trusted package signing keys...
/etc/pki/rpm-gpg ~
~
# [info] Successfully added trusted package signing keys
# [info] Cleaning package cache...
46 files removed

Installez maintenant le paquet MariaDB-backup en utilisant dnf :

[root@centos8 ~]# dnf -y --allowerasing install MariaDB-backup

Téléchargez la base de données sakila :

[root@centos8 ~]# wget http://downloads.mysql.com/docs/sakila-db.tar.gz
--2022-11-09 08:45:31-- http://downloads.mysql.com/docs/sakila-db.tar.gz
Resolving downloads.mysql.com (downloads.mysql.com)... 184.87.189.31, 2a02:26f0:fd00:185::2e31, 2a02:26f0:fd00:194::2e31
Connecting to downloads.mysql.com (downloads.mysql.com)|184.87.189.31|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://downloads.mysql.com/docs/sakila-db.tar.gz [following]
--2022-11-09 08:45:31-- https://downloads.mysql.com/docs/sakila-db.tar.gz
Connecting to downloads.mysql.com (downloads.mysql.com)|184.87.189.31|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 732286 (715K) [application/x-gzip]
Saving to: ‘sakila-db.tar.gz’
sakila-db.tar.gz 100%[====================================================================================================================>] 715.12K 3.09MB/s in 0.2s
2022-11-09 08:45:31 (3.09 MB/s) - ‘sakila-db.tar.gz’ saved [732286/732286]

Désarchivez l'archive :

[root@centos8 ~]# tar xvf sakila-db.tar.gz
sakila-db/
sakila-db/sakila-data.sql
sakila-db/sakila-schema.sql
sakila-db/sakila.mwb

Importez les fichiers sakila-schema.sql et sakila-data.sql :

[root@centos8 ~]# mysql -uroot -p < sakila-db/sakila-schema.sql
Enter password:
ERROR 1728 (HY000) at line 477: Cannot load from mysql.proc. The table is probably corrupted
[root@centos8 ~]# mysql -uroot -p < sakila-db/sakila-data.sql
Enter password:

Vréez le répertoire mkdir /var/mariadb :

[root@centos8 ~]# mkdir /var/mariadb

Effectuez une sauvegarde des bases en utilisant mariabackup :

[root@centos8 ~]# mariabackup --backup --target-dir=/var/mariadb/backup/ --user=root --password=fenestros1
.....
mariabackup: Stopping log copying thread.[00] 2022-11-09 09:36:29 >> log scanned up to (7729884)
[00] 2022-11-09 09:36:29 >> log scanned up to (7729884)
[00] 2022-11-09 09:36:29 Executing BACKUP STAGE END
[00] 2022-11-09 09:36:29 All tables unlocked
[00] 2022-11-09 09:36:29 Backup created in directory '/var/mariadb/backup/'
[00] 2022-11-09 09:36:29 Writing backup-my.cnf
[00] 2022-11-09 09:36:29 ...done
[00] 2022-11-09 09:36:29 Writing xtrabackup_info
[00] 2022-11-09 09:36:29 ...done
[00] 2022-11-09 09:36:29 Redo log (from LSN 1635022 to 7729884) was copied.
[00] 2022-11-09 09:36:29 completed OK!

Consultez le contenu du répertoire /var/mariadb/backup/ :

[root@centos8 ~]# ls -l /var/mariadb/backup/
total 18296
-rw-r-----. 1 root root 16384 Nov 9 09:36 aria_log.00000001
-rw-r-----. 1 root root 52 Nov 9 09:36 aria_log_control
-rw-r-----. 1 root root 285 Nov 9 09:36 backup-my.cnf
-rw-r-----. 1 root root 12582912 Nov 9 09:36 ibdata1
-rw-r-----. 1 root root 6107150 Nov 9 09:36 ib_logfile0
drwx------. 2 root root 249 Nov 9 09:36 ligue1
drwx------. 2 root root 4096 Nov 9 09:36 mysql
drwx------. 2 root root 58 Nov 9 09:36 Nombres
drwx------. 2 root root 20 Nov 9 09:36 performance_schema
drwx------. 2 root root 4096 Nov 9 09:36 sakila
-rw-r-----. 1 root root 77 Nov 9 09:36 xtrabackup_checkpoints
-rw-r-----. 1 root root 450 Nov 9 09:36 xtrabackup_info

Créez maintenant une base de données dénommée world :

[root@centos8 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.9.4-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE world;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> exit
Bye

Téléchargez la nase de données world-db.tar.gz :

[root@centos8 ~]# wget http://downloads.mysql.com/docs/world-db.tar.gz
URL transformed to HTTPS due to an HSTS policy
--2022-11-09 09:40:41-- https://downloads.mysql.com/docs/world-db.tar.gz
Resolving downloads.mysql.com (downloads.mysql.com)... 184.87.189.31, 2a02:26f0:fd00:185::2e31, 2a02:26f0:fd00:194::2e31
Connecting to downloads.mysql.com (downloads.mysql.com)|184.87.189.31|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 92916 (91K) [application/x-gzip]
Saving to: ‘world-db.tar.gz’
world-db.tar.gz 100%[====================================================================================================================>] 90.74K --.-KB/s in 0.05s
2022-11-09 09:40:42 (1.80 MB/s) - ‘world-db.tar.gz’ saved [92916/92916]

Désarchivez le fichier :

[root@centos8 ~]# tar xvf world-db.tar
world-db/
world-db/world.sql

Importez le fichier world.sl :

[root@centos8 ~]# mysql -uroot -p world < world-db/world.sql
Enter password:fenestros1

Procédez maintenant à une sauvegarde incrémentale avec mariabackup :

[root@centos8 ~]# mariabackup --backup --target-dir=/var/mariadb/inc1/ --incremental-basedir=/var/mariadb/backup/ --user=root --password=fenestros1
...
mariabackup: Stopping log copying thread.[00] 2022-11-09 09:45:04 >> log scanned up to (8510078)
[00] 2022-11-09 09:45:05 >> log scanned up to (8510078)
[00] 2022-11-09 09:45:05 Executing BACKUP STAGE END
[00] 2022-11-09 09:45:05 All tables unlocked
[00] 2022-11-09 09:45:05 Backup created in directory '/var/mariadb/inc1/'
[00] 2022-11-09 09:45:05 Writing backup-my.cnf
[00] 2022-11-09 09:45:05 ...done
[00] 2022-11-09 09:45:05 Writing xtrabackup_info
[00] 2022-11-09 09:45:05 ...done
[00] 2022-11-09 09:45:05 Redo log (from LSN 1635022 to 8510078) was copied.
[00] 2022-11-09 09:45:05 completed OK!

Réplication

Présentation

Le réplication a lieu en générale entre une machine maître et une machine esclave. Dans notre cas, nous allons créer ultérieurement un clone de la VM utilisée jusqu'à maintenant pour servir de machine esclave.

Quand la réplication est mise en place, deux threads sont démarrés sur l'esclave :

IO_THREAD - copie les informations des journaux binaires du maître dans son relay log,

SQL-THREAD - exécute les modifications sur la ou les bases de données de l'esclave.

Un troisième thread est ouvert sur le serveur maître par l'IO_THREAD pour le transfert des journaux.

Un esclave ne peut avoir qu'un seul maître mais un maître peut avoir plusieurs esclaves.

Dans une réplication Maître - esclave, ceci permet d'être évolutif en lecture mais pas en écriture. Trop de requêtes en écriture vont “inondées” le ou les esclaves.

Dans une réplication Maître-Maître il est possible d'avoir deux modes de fonctionnement :

actif-passif,

un des maîtres est utilisé pour les écritures/lectures tandis que l'autre est un backup en cas de défaillance du premier,

actif-actif,

les deux maîtres sont utilisés pour les écritures/lectures.

Il existe deux types de réplications :

SBR - Statement Based Replication,

les requêtes SQL sont ré-exécutées sur l'esclave. Cette méthode crée des problèmes quand la requête est dynamique ( par exemple dans le cas d'une fonction ),

RBR - Row Based Replication,

les modifications et les valeurs des enregistrements sont répliqués. Cette méthode est plus lente à cause de la quantité de données à répliquer.

A partir de la version 5.6 de MySQL, il est possible de choisir un mode mixed. Le serveur va choisir la méthode approprié pour chaque cas.

Il est possible de fixer la valeur de plusieurs variable pour choisir quelles bases de données vont être répliquées :

binlog-do-db et binlog-ignore-db sur le maître,

replicate-do-db et replicate-ignore-db sur l'esclave.

Dans le premier cas cela nécessite le re-démarrage du serveur maître. Il est donc préférable d'utiliser les variables sur l'esclave.

LAB #1 - Mise en Place de la Réplication Maître/Esclave

Création du compte de réplication

Saisissez la commande suivante pour créer l'utilisateur replicant et y associer un mot de passe et les permissions adéquates :

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicant'@'%' IDENTIFIED BY 'password';

Vous obtiendrez un résultat similaire à celui-ci :

[root@centos8 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.9.4-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicant'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.031 sec)
MariaDB [(none)]>

Important - Dans le cas de deux machines physiques, cette commande doit être saisie sur le maître et l'esclave. Le compte doit avoir les droits de REPLICATION SLAVE (avant MySQL 4.0.2, il devait avoir les droits de FILE). Le mot de passe password est à modifier mais doit être identique sur le serveur maître et le serveur esclave.

Configurer le maître

Ajoutez ensuite deux lignes dans la section mysqld du fichier /etc/my.cnf.d/server.cnf du maître:

[root@centos8 ~]# cat /etc/my.cnf.d/server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Galera-related settings
#
[galera]
# Mandatory settings
#wsrep_on=ON
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
#AJOUTER LA LIGNE SUIVANTE
server-id = 1
#AJOUTER LA LIGNE SUIVANTE
log-bin = mysql-bin
# this is only for embedded server
[embedded]
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
# This group is only read by MariaDB-10.8 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.8]

Redémarrez le service mariadb :

[root@centos8 ~]# systemctl restart mariadb

Configurer l'esclave

Connectez-vous à la VM esclave au 10.0.2.46. Vérifiez que vous voyez le maître sur le réseau :

[root@centos7 ~]# ping -c3 10.0.2.45
PING 10.0.2.45 (10.0.2.45) 56(84) bytes of data.
64 bytes from 10.0.2.45: icmp_seq=1 ttl=64 time=2.40 ms
64 bytes from 10.0.2.45: icmp_seq=2 ttl=64 time=1.52 ms
64 bytes from 10.0.2.45: icmp_seq=3 ttl=64 time=1.49 ms
--- 10.0.2.45 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.493/1.809/2.407/0.425 ms

Configurez le dépôt de MariaDB et installez mariadb, mariadb-server et MariaDB-backup :

[root@centos8 ~]# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[root@centos8 ~]# dnf install mariadb mariadb-server MariaDB-backup

Démarrez le service mariadb et exéctuez le script mariadb-secure-installation :

[root@centos8 ~]# systemctl start mariadb
[root@centos8 ~]# mariadb-secure-installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n
... skipping.
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] Y
New password: fenestros
Re-enter new password: fenestros
Password updated successfully!
Reloading privilege tables..
... Success!
...

Connectez-vous à MariaDB :

[root@centos8 ~]# mysql -uroot -p
Enter password: fenestros
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.9.4-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>

Saisissez la commande suivante pour créer l'utilisateur replicant et y associer un mot de passe et les permissions adéquates :

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicant'@'%' IDENTIFIED BY 'password';

Vous obtiendrez un résultat similaire à celui-ci :

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicant'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.031 sec)
MariaDB [(none)]>exit
Bye

La base de données du Maître doit être transférée sur l'Esclave. Afin de permettre une sauvegarde complète des bases de données sur le maître, vous devez vous assurer que seulement root y a accès. Ceci est possible grâce à la directive max_connections.

Pour sauvegarder la totalité des bases de données sur le maître, il convient d'utiliser la commande suivante :

[root@centos8 ~]# mysqldump --user=root --password=fenestros1 --extended-insert --all-databases --master-data > /tmp/backup.sql;

Important - Notez que –master-data permet à mysqldump de récupérer les données du maître concernant la réplication.

Transférez le fichier backup.sql vers le serveur esclave :

[root@centos8 ~]# scp /tmp/backup.sql root@10.0.2.46:/tmp
The authenticity of host '10.0.2.46 (10.0.2.46)' can't be established.
ECDSA key fingerprint is SHA256:Q7T/CP0SLiMbMAIgVzTuEHegYS/spPE5zzQchCHD5Vw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.2.46' (ECDSA) to the list of known hosts.
root@10.0.2.46's password:
backup.sql 100% 4044KB 35.2MB/s 00:00
[root@centos8 ~]#

Ensuite sur l'esclave, il convient d'injecter le fichier backup.sql en provenance du maître:

[root@centos8 ~]# mysql --user=root --password=fenestros < /tmp/backup.sql
ERROR 1050 (42S01) at line 3057: Table 'user' already exists

Ajoutez ensuite les lignes dans la section mysqld du fichier /etc/my.cnf.d/server.cnf de l'esclave:

server-id = 2
log-bin = /var/log/mysqld/bin.log
log-bin-index = /var/log/mysqld/log-bin.index
log-error = /var/log/mysqld/error.log
relay-log = /var/log/mysqld/relay.log
relay-log-info-file = /var/log/mysqld/relay-log.info
relay-log-index = /var/log/mysqld/relay-log.index

Vous obtiendrez :

[root@centos8 ~]# vi /etc/my.cnf.d/server.cnf
[root@centos8 ~]# cat /etc/my.cnf.d/server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
server-id = 2
log-bin = /var/log/mysqld/bin.log
log-bin-index = /var/log/mysqld/log-bin.index
log-error = /var/log/mysqld/error.log
relay-log = /var/log/mysqld/relay.log
relay-log-info-file = /var/log/mysqld/relay-log.info
relay-log-index = /var/log/mysqld/relay-log.index
#
# * Galera-related settings
#
[galera]
# Mandatory settings
#wsrep_on=ON
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
# this is only for embedded server
[embedded]
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
# This group is only read by MariaDB-10.8 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.8]

Créez maintenant le répertoire /var/log/mysqld et attribuez-le à l'utilisateur mysql du groupe mysql :

[root@centos8 ~]# mkdir /var/log/mysqld
[root@centos8 ~]# chown mysql:mysql /var/log/mysqld

Définir les paramètres de l'esclave :

[root@centos8 ~]# mysql -uroot -p mysql
Enter password: fenestros1
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.9.4-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [mysql]> CHANGE MASTER TO MASTER_HOST ='10.0.2.45';
Query OK, 0 rows affected (0.39 sec)
MariaDB [mysql]> CHANGE MASTER TO MASTER_PORT =3306;
Query OK, 0 rows affected (0.02 sec)
MariaDB [mysql]> CHANGE MASTER TO MASTER_USER ='replicant';
Query OK, 0 rows affected (0.07 sec)
MariaDB [mysql]> CHANGE MASTER TO MASTER_PASSWORD ='password';
Query OK, 0 rows affected (0.05 sec)
MariaDB [mysql]> exit
Bye

Les valeurs de ces variables sont normalement stockées dans /var/lib/mysql/master.info :

[root@centos8 ~]# cat /var/lib/mysql/master.info
33
4
10.0.2.45
replicant
password
3306
60
0
0
30.000
0
0
using_gtid=0
do_domain_ids=0
ignore_domain_ids=0
END_MARKER

A faire - Pour plus d'informations concernant CHANGE MASTER TO, consultez ce lien.

Redémarrez le service mariadb :

[root@centos8 ~]# systemctl restart mariadb

Ensuite démarrez l'esclave:

[root@centos8 ~]# mysql -uroot -p mysql
Enter password: fenestros1
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.9.4-MariaDB-log MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [mysql]> START SLAVE;
Query OK, 0 rows affected, 1 warning (0.000 sec)
MariaDB [mysql]> SHOW warnings;
+-------+------+--------------------------+
| Level | Code | Message |
+-------+------+--------------------------+
| Note | 1254 | Slave is already running |
+-------+------+--------------------------+
1 row in set (0.000 sec)
MariaDB [mysql]> exit
Bye

Contrôler la réplication

Arrêtez le pare-feu iptables sur l'esclave :

[root@centos7 ~]# systemctl stop firewalld

Pour visualiser le statut de la réplication sur l'esclave, utilisez la commande suivante:

[root@centos8 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.9.4-MariaDB-log MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW SLAVE STATUS;
+----------------------+-------------+-------------+-------------+---------------+-----------------+---------------------+----------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+----------------+-----------------------------+------------------+----------------+--------------------+------------+-------------+-------------------------+-----------------------------+---------------+-----------+---------------------+--------------------------------------------------------+------------------+--------------------------------+----------------------------+
| Slave_IO_State | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error | Replicate_Ignore_Server_Ids | Master_Server_Id | Master_SSL_Crl | Master_SSL_Crlpath | Using_Gtid | Gtid_IO_Pos | Replicate_Do_Domain_Ids | Replicate_Ignore_Domain_Ids | Parallel_Mode | SQL_Delay | SQL_Remaining_Delay | Slave_SQL_Running_State | Slave_DDL_Groups | Slave_Non_Transactional_Groups | Slave_Transactional_Groups |
+----------------------+-------------+-------------+-------------+---------------+-----------------+---------------------+----------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+----------------+-----------------------------+------------------+----------------+--------------------+------------+-------------+-------------------------+-----------------------------+---------------+-----------+---------------------+--------------------------------------------------------+------------------+--------------------------------+----------------------------+
| Connecting to master | 10.0.2.45 | replicant | 3306 | 60 | | 4 | relay.000001 | 4 | | Connecting | Yes | | | | | | | 0 | | 0 | 0 | 256 | None | | 0 | No | | | | | | NULL | No | 2003 | error connecting to master 'replicant@10.0.2.45:3306' - retry-time: 60 maximum-retries: 100000 message: Can't connect to server on '10.0.2.45' (113 "No route to host") | 0 | | | 0 | | | No | | | | optimistic | 0 | NULL | Slave has read all relay log; waiting for more updates | 0 | 0 | 0 |
+----------------------+-------------+-------------+-------------+---------------+-----------------+---------------------+----------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+----------------+-----------------------------+------------------+----------------+--------------------+------------+-------------+-------------------------+-----------------------------+---------------+-----------+---------------------+--------------------------------------------------------+------------------+--------------------------------+----------------------------+
1 row in set (0.000 sec)
MariaDB [(none)]>

Retournez vers le maître est arrêter le pare-feu :

[root@centos8 ~]# systemctl stop firewalld

Pour visualiser le statut de la réplication sur le maître, utilisez la commande suivante:

[root@centos8 ~]# mysql -u root -p
Enter password: fenestros1
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.9.4-MariaDB-log MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 328 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
MariaDB [(none)]>

Modifiez ensuite un enregistrement dans la base ligue1 du Maître :

MariaDB [(none)]> use ligue1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [ligue1]> UPDATE equipe SET stade = 'La réplication fonctionne!!' WHERE id_equipe=1;
Query OK, 1 row affected (0.001 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [ligue1]>

Contrôlez la réplication sur la VM esclave :

[root@centos8 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.9.4-MariaDB-log MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use ligue1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [ligue1]> SELECT * FROM equipe WHERE id_equipe=1;
+-----------+-------------+------------------------------+-------+--------+------+---------------+----------------+
| id_equipe | nom | stade | ville | points | buts | entraineur | tel_entraineur |
+-----------+-------------+------------------------------+-------+--------+------+---------------+----------------+
| 1 | FC Mandriva | La réplication fonctionne!! | Paris | 3 | 3 | Ricardo GOMES | 06-56-56-56-56 |
+-----------+-------------+------------------------------+-------+--------+------+---------------+----------------+
1 row in set (0.000 sec)
MariaDB [ligue1]>

Copyright © 2022 Hugh Norris.