Configuration de la réplication maître-esclave MySQL 8.0.30

Voici les étapes pour configurer une réplicasion maître-esclave avec MySQL version 8.0.30.

Préparation des fichiers et utilisateurs

1. Décompression des paquets :


# Téléchargement depuis : https://downloads.mysql.com/archives/community/
tar xf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.30-linux-glibc2.12-x86_64 mysql
mkdir mysql/{data,logs}

2. Création de l'utilisateur et des permissions :


groupadd mysql
useradd -M -s /sbin/nologin -g mysql mysql
chown -R mysql.mysql mysql

Configuration des nœuds maître et esclave

3. Édition des fichiers de configuration (my.cnf) :

Configuration du maître (master) :

[mysql]
default-character-set=utf8mb4
prompt=[\u@\h][\d]>\_

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/data/mysql
datadir=/data/mysql/data
log-error=/data/mysql/data/mysql.err
socket=/tmp/mysql.sock
pid-file=/data/mysql/data/mysql.pid

server-id=1

innodb_buffer_pool_size = 8G
innodb_log_file_size = 2G
max_allowed_packet=100M
transaction_isolation=READ-COMMITTED
skip-name-resolve

slow_query_log=ON
slow_query_log_file=/data/mysql/data/slow.log
long_query_time=1

gtid_mode=ON
enforce_gtid_consistency=ON
binlog-checksum = CRC32
master-verify-checksum = 1

binlog_format=row
expire_logs_days=7
max_binlog_size=512M
log-bin=/data/mysql/logs/mysql-bin
log_bin_index=/data/mysql/logs/mysql-bin.index
log-slave-updates = ON

relay_log_recovery=1
relay_log_purge=1
relay_log_info_repository=TABLE
relay-log = /data/mysql/logs/relay-log
relay-log-index = /data/mysql/logs/relay-log-index

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled=1
rpl-semi-sync-slave-enabled=1

character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
default_authentication_plugin=mysql_native_password
lower_case_table_names=1

Configuration de l'esclave (slave) :

Il suffit de modifier le server-id pour qu'il soit unique par rapport au maître.

Après avoir sauvegardé et quitté, ajustez les permissions des fichiers :

# chown mysql.mysql *

Initialisation et démarrage de MySQL

4. Initialisation de la base de données :

# cd /data/mysql
# ./bin/mysqld --defaults-file=/data/mysql/my.cnf --basedir=/data/mysql --datadir=/data/mysql/data --lower_case_table_names=1 --user=mysql --initialize

Note : L'option --lower\_case\_table\_names=1 doit être spécifiée lors de l'initialisation pour MySQL 8. Si elle n'est pas ajoutée à ce stade et ajoutée plus tard dans le ficheir de configuration, le redémarrage entraînera une erreur. Le mot de passe initial de la base de données se trouve dans le fichier mysql.err.

5. Démarrage du service :

# ./bin/mysqld_safe --defaults-file=/data/mysql/my.cnf &

Configuration des utilisateurs et de la réplication

6. Modification du mot de passe root et création d'un utilisateur root distant :

mysql> alter user 'root'@'localhost' identified by 'Root~123';
mysql> create user 'root'@'%' identified WITH mysql_native_password by 'Root~123';
mysql> grant all privileges on *.* to 'root'@'%' with grant option;

7. Création de l'utilisateur de réplication et attribution des privilèges :

mysql> create user 'repl'@'%' identified with mysql_native_password by 'repl';
mysql> grant replication slave on *.* to 'repl'@'%';
mysql> flush privileges;

Mise en place de la synchronisation maître-esclave

La procédure d'installation sur le nœud esclave est identique. Il n'est pas nécessaire de créer le compte root sur l'esclave, car il sera synchronisé depuis le maître.

Configuration avec GTID (recommandé)

mysql> CHANGE MASTER TO MASTER_HOST='73.134.64.72',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_AUTO_POSITION=1;
mysql> start slave;
mysql> show slave status\G;

Configuration par journal binaire (binlog)

Sur le nœud maître, récupérez l'état actuel du journal binaire :

mysql> show master status;

Notez les valeurs de File et Position.

Sur le nœud esclave, configurez la connexion au maître :

mysql> CHANGE MASTER TO MASTER_HOST='73.134.64.72',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=2229;
mysql> start slave;
mysql> show slave status\G;

Vérifiez l'état de la réplication en vous assurant que Slave\_IO\_Running et Slave\_SQL\_Running sont tous deux à yes. En cas d'échec (no), examinez les erreurs inddiquées dans Last\_IO\_Error ou Last\_SQL\_Error.

Personnalisation de l'invite de commande MySQL :

Pour que l'invite de commande prompt définie dans le fichier de configuration soit prise en compte, configurez la variable d'environnement : export MYSQL\_PS1="\[\\u@\\h\]\[\\d\]> " .

Étiquettes: MySQL réplication maître-esclave gtid binlog

Publié le 20 août à 08h16