Aller au contenu

Réplication primaire-secondaire MySQL/MariaDB/Percona

Installer une réplication primaire-secondaire sur Stack Harbor PaaS pour MySQL, MariaDB et Percona — automatique via auto-clustering, ou manuelle via deux environnements.

La réplication primaire-secondaire écrit les événements de changement sur une base (la primaire) dans un journal binaire qu’une ou plusieurs secondaires lisent et appliquent. Cette page couvre les cas d’usage, le chemin d’installation automatisé sur Stack Harbor PaaS, et la procédure manuelle pour MySQL, MariaDB et Percona.

La réplication peut être synchrone (les changements sont appliqués sur la primaire et la secondaire dans la même transaction) ou asynchrone (la secondaire traîne derrière la primaire d’un certain délai). La réplication asynchrone de la famille MySQL est la valeur par défaut ; la réplication synchrone est disponible via Galera (une topologie de grappe distincte).

Cas d’usage

  • Sauvegardes. Lancer la sauvegarde contre la secondaire. La secondaire peut être mise en pause sans affecter la primaire, donc la primaire continue de servir le trafic pendant la fenêtre de sauvegarde.
  • Scale-out en lecture. Diriger le trafic de lecture vers une ou plusieurs secondaires ; garder les écritures sur la primaire. Fonctionne bien quand les lectures dominent les écritures.
  • Répartir la charge. Répliquer des bases (ou schémas) différents vers des secondaires différentes — par exemple, les données ventes vers la secondaire analytics, les données applicatives vers la secondaire applicative.
  • Distribution longue distance. Faire tourner une secondaire dans une autre région, en réplication asynchrone, pour servir les lectures locales à plus faible latence.
  • Bascule. Apparier une primaire et une secondaire avec un moniteur ; en cas de panne primaire, promouvoir la secondaire.
  • Réplication chiffrée TLS. Chiffrer le flux binlog entre primaire et secondaire avec un certificat SSL de chaque côté.

Installation automatique

Stack Harbor PaaS provisionne une grappe primaire-secondaire depuis l’assistant de topologie en quelques clics :

  1. Cliquer Nouvel environnement dans le tableau de bord.
  2. Choisir MySQL, MariaDB ou Percona dans l’assistant.
  3. Activer Auto-Clustering.
  4. Choisir Primary-Secondary dans la liste Scheme.
  5. Ajuster les autres paramètres et cliquer Créer.

Alternative : installer l’application empaquetée MySQL / MariaDB / Percona Cluster depuis le marketplace de la plateforme. Choisir le moteur et le schéma de réplication à l’installation, fixer les paramètres d’environnement, cliquer Installer.

Après quelques minutes, la grappe est en service et configurée.

Installation manuelle

Pour un contrôle total sur la configuration — format binlog personnalisé, privilèges utilisateur personnalisés, politique de skip-error personnalisée — installer à la main contre deux environnements. La procédure fonctionne pour MySQL et MariaDB (les commandes notent quand MySQL 8.0.22+ utilise la syntaxe récente).

1. Créer deux environnements

  1. Se connecter au tableau de bord, cliquer Nouvel environnement.
  2. Choisir le moteur (p. ex. MariaDB), définir la limite de cloudlets, nommer l’environnement primary-db, cliquer Créer.
  3. Répéter pour secondary-db, ou cloner le premier environnement.

Vous avez maintenant deux environnements identiques.

2. Configurer la primaire

Cliquer Config sur le nœud base de données primaire, ouvrir my.cnf, ajouter (ou décommenter) :

server-id = 1
log-bin = mysql-bin
binlog-format = mixed

Utiliser le format binlog mixed — il gère proprement les opérations avec clés étrangères. Ne pas utiliser statement ; cela produit des erreurs de réplication sur les charges courantes à clés étrangères.

Sauvegarder et Redémarrer la base pour appliquer la nouvelle configuration.

Ouvrir phpMyAdmin via Ouvrir dans le navigateur sur la primaire, se connecter avec les identifiants root du courriel à la création, naviguer vers User accounts, cliquer Add user account. Fixer nom et mot de passe pour l’utilisateur de réplication, faire défiler vers le bas, et accorder les privilèges REPLICATION CLIENT et REPLICATION SLAVE. Cliquer Go.

Basculer vers l’onglet Status et noter les valeurs File et Position du journal — vous en aurez besoin pour configurer la secondaire.

3. Configurer la secondaire

De retour au tableau de bord, cliquer Config sur le nœud base de données secondaire, ouvrir my.cnf, ajouter :

server-id = 2
slave-skip-errors = all

Note sur slave-skip-errors = all : cela ignore toute erreur venant de la primaire. Utile en développement pour garder la réplication active pendant que vous trouvez et corrigez des bugs. En production, remplacer par une liste d’erreurs spécifiques à ignorer, pour qu’un vrai problème de corruption de données remonte au lieu d’être avalé silencieusement.

Ouvrir /etc/phpMyAdmin/config.inc.php et ajouter :

$cfg['AllowArbitraryServer'] = true;

Sauvegarder et Redémarrer la base secondaire.

Ouvrir la console Web SSH sur la secondaire et se connecter à la base :

mysql -u root -p

4. Pointer la secondaire sur la primaire

Vous avez besoin de ces valeurs depuis l’installation primaire :

  • Hôte primaire — CNAME ou IP du nœud primaire (depuis le tableau de bord).
  • Nom et mot de passe de l’utilisateur de réplication (créés à l’étape 2).
  • Fichier journal de la primaire (depuis l’onglet Status — mysql-bin.000001 ou similaire).
  • Position journal de la primaire (aussi depuis Status).

Pour MariaDB, et pour les versions MySQL avant 8.0.22 — déprécié mais toujours rétrocompatible sur les versions courantes MySQL et Percona :

CHANGE MASTER TO
    MASTER_HOST='node{node_id}-primary-db.{domain}',
    MASTER_USER='replication',
    MASTER_PASSWORD='passw0rd',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=865;

Pour MySQL 8.0.22+ et Percona courant, la syntaxe moderne est préférée :

CHANGE REPLICATION SOURCE TO
    SOURCE_HOST='node{node_id}-primary-db.{domain}',
    SOURCE_USER='replication',
    SOURCE_PASSWORD='passw0rd',
    SOURCE_LOG_FILE='mysql-bin.000001',
    SOURCE_LOG_POS=865;

5. Démarrer la réplique

Pour MySQL 8.0.22+ :

START REPLICA;

Pour MariaDB avant 10.5.1 et MySQL avant 8.0.22 :

START SLAVE;

Pour vérifier que la réplication est saine, ouvrir phpMyAdmin sur la secondaire, aller à Status, confirmer que la réplication tourne.

6. Vérifier

Créer une base de test sur la primaire (p. ex. replication_test) — la même base devrait apparaître sur la secondaire en quelques secondes. Sinon, vérifier le statut de réplication de la secondaire via SHOW REPLICA STATUS\G (ou SHOW SLAVE STATUS\G sur les anciennes versions) pour les erreurs.

Voir aussi