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

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

La réplication MySQL est un processus où un serveur maître reproduit ses données à un ou plusieurs serveurs esclaves. Cela peut fournir plusieurs avantages tels que l'augmentation de la disponibilité des données, des performances améliorées et des sauvegardes plus faciles. Un aspect important de la réplication est la sécurité, et dans cet article, nous explorerons comment configurer la réplication MySQL Master-Slave avec l'authentification à l'aide de certificats SSL.

En utilisant des certificats SSL, nous pouvons nous assurer que les données reproduites sont sécurisées et ne peuvent être accessibles que par des parties autorisées. De plus, les certificats SSL peuvent également être utilisés pour authentifier les serveurs maître et esclaves, offrant une couche de sécurité supplémentaire.

Dans cet article, nous allons passer par le processus de configuration d'une configuration de réplication à esclaves maître avec des certificats SSL, y compris la création et l'installation des certificats, la configuration des serveurs maître et esclaves et le dépannage des problèmes communs.

Avantages de réplication MySQL

Les principaux avantages de la réplication maître-esclave de MySQL sont:

  • Performance: L'un des principaux avantages est qu'il permet le déchargement des requêtes en lecture seule de la base de données principale aux esclaves, améliorant les performances et l'évolutivité du système de base de données. En effet.
  • Redondance et tolérance aux défauts: Un autre avantage de la réplication maître-esclave de MySQL est qu'il fournit un niveau de redondance et de tolérance aux défauts. Si la base de données principale tombe en panne, les esclaves peuvent continuer à servir les demandes de lecture, minimisant les temps d'arrêt. De plus, si une base de données d'esclaves tombe en panne, elle peut être remplacée par un nouvel esclave et que les données peuvent être synchronisées à partir du maître.
  • Sauvegarde et récupération: La réplication MySQL Master-Slave peut également être utilisée pour les sauvegardes et la récupération des données. En prenant régulièrement des sauvegardes des esclaves, vous pouvez avoir une copie des données qui peuvent être utilisées en cas de catastrophe dans la base de données principale.

Cet article vous aidera à mettre en place une réplication maître-esclave entre deux serveurs MySQL. Ce tutoriel est testé sur Ubuntu 22.04 Instance Linux avec mysql 8.0 serveur de base de données.

Détails de la configuration:

À des fins de test, j'ai créé deux systèmes dans mon réseau local. Les deux systèmes ont une propriété intellectuelle différente du même réseau. En supposant que les serveurs de base de données maître et esclaves ont les IP ci-dessous comme ci-dessous:

Master Server: 11.11.11.11 serveur esclave: 22.22.22.22 

Si vous utilisez des versions différentes - différentes versions de MySQL sur Master et Slave Utilisez ce lien pour vérifier la compatibilité.

Étape 1: Créer des certificats SSL [Master]

Tout d'abord, vous devez générer un certificat CA. Une autorité de certificat (CA) est une organisation tierce de confiance qui émet des certificats numériques utilisés pour vérifier l'identité et l'authenticité d'une entité. Ensuite, nous pouvons générer un certificat numérique pour le système maître et client signé par le certificat CA.

  1. Créer un répertoire pour stocker les nouveaux certificats SSL.
    MKDIR / ETC / MYSQL / CERTS  CD / etc / MySQL / CERTS  
  2. Maintenant, générez le certificat à utiliser comme autorité de certificat.
    OpenSSL Genrsa 4096> CA-Key.pem  OpenSSL REQ -NEW -X509 -Nodes -Days 9999 -Key Ca-Key.pem> ca-cerf.pem  
  3. Générez le certificat pour le serveur maître MySQL:
    OpenSSL REQ -NEWKEY RSA: 4096 -Days 9999 -Nodes -Keyout Server-Key.pem> server-req.pem  OpenSSL X509 -req -in Server-Req.pem -days 9999 -ca ca-certe.pem -cakey ca-key.pem -set_serial 01> serveur de serveur.pem  
  4. Générez ensuite le certificat pour le système client (esclave).
    OpenSSL REQ -NEWKEY RSA: 4096 -Days 9999 -Nodes -Keyout Client-Key.pem> client-req.pem  OpenSSL X509 -req -in Client-Req.pem -days 9999 -ca ca-certe.pem -cakey ca-key.pem -set_serial 01> Client-cert.pem  

Note importante: Assurez-vous d'utiliser un autre "Nom commun (FQDN)" pour les fichiers CA que les fichiers de certificat maître et client.

Étape 2: Mettre à jour le fichier de configuraion mysql [maître]

Ensuite, le fichier de configuration MySQL (par exemple: / etc / mysql / mysql.confli.d / mysqld.CNF) et ajouter / mettre à jour les entrées suivantes:

[mysqld] server-id = 1 binlog-format = mixte log-bin = mysql-bin innodb_flush_log_at_trx_commit = 1 sync_binlog = 1 ssl ssl-ca = / etc / mysql / certs / ca-certed.PEM SSL-CERT = / etc / MySQL / CERTS / Server-CERT.pem ssl-key = / etc / mysql / certs / server-key.pem
1234567891011[mysqld] server-id = 1binlog-format = mixtelog-bin = mysql-bininnodb_flush_log_at_trx_commit = 1Sync_binlog = 1 sslssl-ca = / etc / mysql / certifications / ca-certe.pemssl-cert = / etc / mysql / certs / serveur-certe.pemssl-key = / etc / mysql / certs / server-key.pem

Étape 3: Créer un utilisateur de réplication [Master]

Dans cette étape, nous créerons un nouvel utilisateur dans le serveur MySQL qui sera utilisé pour authentifier les clients avec le service maître. Donc, connectez-vous au serveur MySQL sur le serveur de base de données maître avec l'utilisateur privilégié. Créez ensuite un nouvel utilisateur, qui sera utilisé pour le processus de réplication.

Connectez-vous à MySQL Server, puis exécutez et exécutez les requêtes suivantes pour créer un nouvel utilisateur et accordez-les à l'accès des esclaves.

mysql> créer une 'réplication de l'utilisateur' @ '22.22.22.22 «identifié par« asecurepa $$ w0rd »exiger ssl; MySQL> Slave de réplication de la subvention sur *.* À 'réplication' @ '22.22.22.22 '; MySQL> Privilèges de rinçage;
123mysql> créer une 'réplication de l'utilisateur' @ '22.22.22.22 'identifié par' asecurepa $$ w0rd 'exiger ssl; mysql> subvention de réplication esclave sur *.* À 'réplication' @ '22.22.22.22 '; MySql> Privilèges de rinçage;

Assurez-vous de remplacer '22.22.22.22 'avec l'adresse IP de l'instance esclave.

Assurez-vous d'utiliser un mot de passe solide pour le compte d'utilisateur.

Étape 4: vider les bases de données [maître]

Maintenant, exportez toutes les bases de données sur l'instance maître 'mysqldump' utilitaire.

mysqldump -uroot -p --skip-lock-tables --single-transaction \ --flush-logs - hex-blob --master-data = 2 -a | gzip -c> vidage.SQL.gz  

Copiez le fichier de vidage sur le serveur esclave.

vidage SCP.SQL.GZ [e-mail protégé]:  

La commande invitera le mot de passe utilisateur distant. Une fois l'utilisateur à l'authentification, le fichier sera copié sur un serveur distant dans le répertoire domestique du compte «racine».

Étape 5: Copier les fichiers de certificats SSL [Master]

Copiez les fichiers de la clé client et du certificat et du certificat CA sur l'instance esclave. Assurez-vous que le "/ etc / mysql / certifications" Le répertoire existe un système distant.

SCP / ETC / MySQL / CERTS / CA-CERT.pem [e-mail protégé]: / etc / mysql / certs /  SCP / ETC / MySQL / CERTS / CLIENT-CERT.pem [e-mail protégé]: / etc / mysql / certs /  SCP / ETC / MySQL / CERTS / CLIENT-KEY.pem [e-mail protégé]: / etc / mysql / certs /  

Remarque: Configurez les clés SSH pour la connexion automatique ou utilisez des mots de passe pour se connecter à la distance.

Étape 6: restaurer la sauvegarde de la base de données [esclave]

Connectez-vous au serveur client de réplication MySQL. Extraire le fichier de vidage à l'aide de l'utilitaire Gunzip. Après cela, restaurez la base de données.

décharge de Gunzip.SQL.gz  mysql -uroot -p -f < dump.sql  

Ensuite vérifier la position du fichier journal dans le fichier de sauvegarde.

décharge de tête.SQL -N80 | grep "Master_log_pos"  

La sortie ressemblera à ceci:

Sortie - Changez maître en master_log_file = "mysql-bin.000007 ", master_log_pos = 154; 

Noter la Maître_log_file et Maître_log_pos valeurs, qui seront utilisées plus tard dans cet article.

Étape 7: Mettez à jour la configuration de l'esclave MySQL [esclave]:

Ensuite, le fichier de configuration MySQL (par exemple: / etc / mysql / mysql.confli.d / mysqld.CNF) et ajouter / mettre à jour les entrées folloiwng:

[MySQLD] server-id = 2 binlog-format = mixte log-bin = mysql-bin relay-log = mysql-relay-bin log-slave updates = 1 readly = 1
1234567[mysqld] server-id = 2binlog-format = mixtelog-bin = mysql-binrelay-log = mysql-lilay-binlog-slave-updates = 1Read-only = 1

Étape 8: Démarrer la réplication des esclaves [esclave]

Configurez l'instance d'esclaves avec l'adresse IP de l'instance maître avec l'utilisateur de réplication, leur mot de passe et le certificat copié à partir de l'instance maîtresse. Assurez-vous de mettre à jour 'Mysql-bin.###### ' et 'Maître_log_pos = ###' Identique que nous arrivons à l'étape 6. Inclure tous les zéros.

mysql> changer de maître en master_host = "11.11.11.11 ", maître_user = 'réplication', maître_password =" asecurepa $$ w0rd ", maître_ssl_ca =" / etc / mysql / certs / ca-certe.pem ", master_ssl_cert =" / etc / mysql / certs / client-cerret.pem ", master_ssl_key =" / etc / mysql / certs / client-key.pem ", maître_ssl = 1, maître_log_file =" mysql-bin.###### ", maître_log_pos = ###;
12345678mysql> changer de maître en master_host = '11.11.11.11 ', Master_User =' Replication ', Master_PassWord =' ​​AseCurePa $$ W0RD ', Master_SSL_CA =' / etc / MySQL / CERTS / CA-CERT.pem ', master_ssl_cert =' / etc / mysql / certs / client-cerret.pem ', master_ssl_key =' / etc / mysql / certs / client-key.pem ', maître_ssl = 1, maître_log_file =' mysql-bin.###### ', Master_Log_pos = ###;

Enfin démarrer le processus de réplication:

mysql> commencer l'esclave;
1mysql> commencer l'esclave;

Cela permettra et démarrera le processus de réplication.

Étape 9: Vérifiez la réplication

Vous pouvez exécuter le 'Afficher le statut d'esclaves' Requête pour vérifier l'état actuel de la réplication:

mysql> montrer le statut d'esclave \ g
1mysql> montrer le statut d'esclave \ g
Sortie *************************** 1. Row *************************** Slave_io_state: attendant que la source envoie un événement maître_host: 11.11.11.11 Master_User: Replication Master_port: 3306 Connect_retry: 60 Master_Log_file: MySQL-Bin.000177 read_master_log_pos: 100443919 relay_log_file: mysql-relay-bin.000498 RELAY_LOG_POS: 104189538 RELAY_MASHER_LOG_FILE: MySQL-BIN.000169 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: 104189322 Relay_Log_Space: 972921462 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Yes Master_SSL_CA_File: /etc/mysql / CERTS / CA-CERT.pem Master_SSL_CA_PATH: Master_SSL_CERT: / etc / MySQL / CERTS / CLIENT-CERT.pem Master_SSL_CIPHER: Master_SSL_KEY: / etc / MySQL / CERTS / Client-Key.pem seconds_behind_master: 13803 master_ssl_verify_server_cert: no last_io_errno: 0 last_io_error: last_sql_errno: 0 last_sql_error: replicate_ignore_server_ids: maître_server_id: 1 master_UUID: a548db65-a007-11.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Waiting for dependent transaction to commit Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row En jeu, 1 avertissement (0.00 sec) 

Vérifier la valeur de 'Seconds_behind_master'. La valeur zéro (0) signifie que les deux systèmes sont complètement synchronisés.
La réplication MySQL Master-Slave a été configurée avec succès sur votre système et est en mode de travail. Merci d'avoir utilisé ce tutoriel, n'oubliez pas de le partager avec vos amis.

Conclusion

Dans cet article, nous avons couvert le processus de configuration de la réplication MySQL Master-Slave avec authentification à l'aide de certificats SSL. Nous avons parcouru les étapes de création et d'installation des certificats, de configuration des serveurs maître et esclaves et de dépannage des problèmes communs. En utilisant des certificats SSL, nous nous sommes assurés que les données reproduites sont sécurisées et ne peuvent être accessibles que par des parties autorisées. De plus, les certificats SSL ont été utilisés pour authentifier les serveurs maître et esclaves, offrant une couche de sécurité supplémentaire. Cette approche peut aider les organisations à améliorer la sécurité de leur environnement de réplication et à assurer l'intégrité et la confidentialité de leurs données.

Dans l'ensemble, la réplication MySQL Master-Slave est un outil utile pour améliorer les performances, l'évolutivité et la tolérance aux pannes d'un système de base de données MySQL. Il permet la distribution des données sur plusieurs serveurs et peut être utilisé pour les sauvegardes et la récupération des données.