MariaDB : Mise en place d’une réplication Master → Slave

20 juillet 2026 — par admin_libra

La réplication MariaDB est l’une des techniques fondamentales pour mettre en place une architecture de base de données résiliente. Dans un modèle Master → Slave, toutes les écritures s’effectuent sur le serveur primaire (Master), qui enregistre chaque modification dans un journal binaire (binlog). Le serveur secondaire (Slave) lit ce journal en continu et rejoue les opérations pour maintenir une copie synchronisée des données.

Cette architecture présente plusieurs avantages immédiats : la distribution de la charge en lecture (les requêtes SELECT peuvent être redirigées vers le Slave), la sauvegarde sans impact (on dump le Slave pendant que le Master continue de servir), et un socle solide pour la haute disponibilité en cas de panne du Master.

Ce tutoriel couvre l’installation et la configuration complète d’une réplication MariaDB 11.x sur deux serveurs Debian/Ubuntu, de la configuration des fichiers my.cnf jusqu’à la vérification du statut de synchronisation.

Prérequis

  • Deux serveurs Debian 12 / Ubuntu 24.04 (ou versions LTS récentes)
  • MariaDB 11.x installé sur les deux serveurs (voir ci-dessous)
  • Connectivité réseau entre les deux serveurs sur le port 3306/tcp
  • Accès root ou sudo sur les deux machines

Pour cet article, on utilisera :

  • Master : 192.168.1.10
  • Slave : 192.168.1.20

Installation de MariaDB 11.x sur Debian/Ubuntu

Si MariaDB n’est pas encore installé, utilisez le script officiel de MariaDB Foundation pour ajouter le dépôt et installer la version LTS 11.4 :

# Installer les dépendances nécessaires
apt update && apt install -y apt-transport-https curl gnupg

# Ajouter le dépôt officiel MariaDB 11.4 LTS
curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup 
  | bash -s -- --mariadb-server-version="mariadb-11.4"

# Installer MariaDB
apt install -y mariadb-server mariadb-client

# Activer et démarrer le service
systemctl enable --now mariadb

# Sécurisation initiale
mariadb-secure-installation

Répétez cette opération sur les deux serveurs.

Configuration du serveur Master

Activation du binlog et identifiant de serveur

Le binlog (journal binaire) est le mécanisme central de la réplication. Créez un fichier de configuration dédié sur le Master :

# Sur le Master (192.168.1.10)
cat > /etc/mysql/mariadb.conf.d/60-replication.cnf << 'EOF'
[mariadb]
# Identifiant unique du serveur (entier entre 1 et 2^32-1)
server-id               = 1

# Activation et nommage du binlog
log-bin                 = mariadb-bin
log-basename            = master1

# Format ROW : réplication ligne par ligne, plus fiable que STATEMENT
binlog-format           = ROW

# Purge automatique des binlogs après 7 jours
expire_logs_days        = 7

# Écouter sur toutes les interfaces réseau
bind-address            = 0.0.0.0
EOF

systemctl restart mariadb

Important : Le paramètre bind-address = 0.0.0.0 est nécessaire pour que le Slave puisse se connecter. En production, préférez restreindre l’accès via nftables ou en spécifiant l’IP du réseau interne.

Création de l’utilisateur de réplication

Sur le Master, connectez-vous à MariaDB et créez un utilisateur dédié à la réplication, en restreignant son accès à l’IP du Slave :

# Connexion à MariaDB sur le Master
mariadb -u root -p
-- Créer l'utilisateur de réplication restreint à l'IP du Slave
CREATE USER 'replicator'@'192.168.1.20' IDENTIFIED BY 'MotDePasseF0rt!';

-- Accorder uniquement le privilège de réplication
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'192.168.1.20';

-- Appliquer les privilèges
FLUSH PRIVILEGES;

Récupération des coordonnées du binlog

Avant d’exporter les données, verrouillez les tables en lecture pour obtenir une position cohérente du binlog :

-- Verrouillage en lecture (ne pas fermer cette session !)
FLUSH TABLES WITH READ LOCK;

-- Relever le fichier et la position courants
SHOW MASTER STATUS;
-- +--------------------+----------+
-- | File               | Position |
-- +--------------------+----------+
-- | master1-bin.000001 |      684 |
-- +--------------------+----------+

Notez le fichier et la position — vous en aurez besoin lors de la configuration du Slave.

Export des données du Master

Dans un deuxième terminal (laissez ouvert le terminal avec le verrou), exportez les données :

# Export avec inclusion automatique de la position binlog dans le dump
mariadb-dump 
  --user=root 
  --password 
  --all-databases 
  --master-data=2 
  --single-transaction 
  --routines 
  --triggers 
  > /tmp/master_dump.sql

# Vérifier que la position binlog est bien inscrite en commentaire
head -50 /tmp/master_dump.sql | grep "CHANGE MASTER"

Une fois le dump terminé, déverrouillez les tables dans le premier terminal :

-- Déverrouillage des tables sur le Master
UNLOCK TABLES;

Transférez ensuite le dump vers le Slave via scp :

# Depuis le Master, transfert vers le Slave
scp /tmp/master_dump.sql [email protected]:/tmp/

Configuration du serveur Slave

Paramétrage my.cnf

Sur le Slave, créez le fichier de configuration avec un server-id différent et activez le relay-log :

# Sur le Slave (192.168.1.20)
cat > /etc/mysql/mariadb.conf.d/60-replication.cnf << 'EOF'
[mariadb]
# Identifiant unique, différent du Master
server-id               = 2

# Relay log : journal local des événements reçus du Master
relay-log               = relay-bin
relay-log-index         = relay-bin.index

# Mode lecture seule : interdire les écritures directes sur le Slave
read_only               = 1

# Empêcher toute écriture même pour les comptes SUPER (MariaDB 10.5+)
super_read_only         = 1

# Propager les événements reçus dans le binlog local (utile pour chaînage)
log-slave-updates       = 1
EOF

systemctl restart mariadb

Import des données et connexion au Master

Importez le dump du Master sur le Slave, puis configurez la connexion de réplication :

# Import du dump sur le Slave
mariadb -u root -p < /tmp/master_dump.sql
-- Connexion à MariaDB sur le Slave
mariadb -u root -p

-- Configurer la connexion au Master avec les coordonnées relevées précédemment
CHANGE MASTER TO
  MASTER_HOST     = '192.168.1.10',
  MASTER_USER     = 'replicator',
  MASTER_PASSWORD = 'MotDePasseF0rt!',
  MASTER_LOG_FILE = 'master1-bin.000001',
  MASTER_LOG_POS  = 684;

-- Démarrer la réplication
START SLAVE;

Vérification du statut de la réplication

Immédiatement après avoir démarré le Slave, vérifiez le statut :

-- Vérification complète du statut (sortie formatée verticalement)
SHOW SLAVE STATUS G

Les deux lignes critiques à surveiller :

Slave_IO_Running: Yes    # Thread de lecture du binlog Master : actif
Slave_SQL_Running: Yes   # Thread d'exécution des requêtes : actif
Seconds_Behind_Master: 0 # Retard en secondes (0 = à jour)

Si l’un des threads affiche No ou Connecting, consultez le champ Last_Error dans la sortie pour diagnostiquer le problème (erreur de connexion, conflit de données, fichier binlog introuvable).

Aller plus loin : réplication via GTID

Les GTID (Global Transaction Identifiers) simplifient la gestion de la réplication en s’affranchissant des coordonnées binlog manuelles. MariaDB implémente son propre système GTID, activé par défaut depuis la version 10.x. Pour basculer vers la réplication GTID :

-- Sur le Slave : arrêter la réplication et reconfigurer avec GTID
STOP SLAVE;

CHANGE MASTER TO
  MASTER_HOST     = '192.168.1.10',
  MASTER_USER     = 'replicator',
  MASTER_PASSWORD = 'MotDePasseF0rt!',
  MASTER_USE_GTID = slave_pos;

START SLAVE;
SHOW SLAVE STATUS G

Avec les GTID, le Slave reprend automatiquement à la bonne position après un redémarrage, et le basculement vers un nouveau Master est facilité car il n’est plus nécessaire de rechercher les coordonnées binlog manuellement.

Bonnes pratiques et sécurité

  • Restreindre le port 3306 : n’exposez jamais le port MariaDB sur l’interface publique. Utilisez nftables pour limiter l’accès au seul IP du Slave.
  • Chiffrement du flux de réplication : ajoutez MASTER_SSL=1, MASTER_SSL_CA, MASTER_SSL_CERT et MASTER_SSL_KEY dans CHANGE MASTER TO pour chiffrer le canal entre Master et Slave.
  • Privilège minimal : l’utilisateur replicator n’a que le droit REPLICATION SLAVE — ne lui accordez aucun autre privilège.
  • Surveiller le retard : intégrez Seconds_Behind_Master dans votre outil de supervision (Prometheus, Zabbix, Netdata) et déclenchez une alerte si la valeur dépasse un seuil critique.
  • Tester le basculement : documentez et exercez régulièrement la procédure de promotion du Slave en Master (STOP SLAVE; RESET SLAVE ALL; puis reconfiguration applicative).
  • Purger les binlogs : expire_logs_days évite la saturation du disque sur le Master. Ajustez la valeur en fonction de votre volume d’écritures.

À lire également

Références

Index complet

Tous les articles (58)

Date Article Tags
20/07/2026 SSL : Certificat Let's Encrypt avec Certbot sur Debian/Ubuntu (sans Snap) apache certbot certificat 20/07/2026 MariaDB : Tuning mariadb server sous debian / ubuntu et operation de maintenance sauvegarde/restauration debian innodb maintenance 20/07/2026 MariaDB : Mise en place d'une réplication Master → Slave base-de-données binlog debian 20/07/2026 OpenSVC : piloter des conteneurs LXC sur datasets ZFS avec snapshots et réplication sous Debian/Ubuntu conteneurs debian haute-disponibilité 20/07/2026 SCREEN : utilisation et cas d'usage des screens sous Linux administration bash debian 20/07/2026 EtherPAD : installation et configuration d'Etherpad collaboration debian editeur-collaboratif 20/07/2026 Wazuh 4.14 : déployer un SIEM/XDR open source sur Debian/Ubuntu compliance debian fim 20/07/2026 Incus 7.x : gérer conteneurs système et VMs sur Debian/Ubuntu — le successeur communautaire de LXD conteneurs debian incus 20/07/2026 Restic : sauvegardes incrémentielles chiffrées sur Debian et Ubuntu backup chiffrement debian 20/07/2026 Restic : sauvegardes chiffrées et dédupliquées sur Debian/Ubuntu automatisation backup chiffrement 30/06/2026 PHP : gérer plusieurs versions PHP-FPM avec les dépôts Sury sur Debian/Ubuntu administration apache debian 22/06/2026 OS : Cycle de vie LTS et mise à jour des distributions — apt dist-upgrade et do-release-upgrade sous Debian / Ubuntu apt cycle-de-vie debian 17/06/2026 APT : Guide complet de la gestion des paquets sous Debian et Ubuntu administration apt debian 17/06/2026 SHELL : Guide des commandes les plus usuelles et commandes couteau suisse awk bash commandes 17/06/2026 SUDO : implémentation et sécurisation des accès sur Debian/Ubuntu administration audit authentification 17/06/2026 ProFTPd : authentification MySQL centralisée, FTPs (SSL) et SFTP sur Debian/Ubuntu authentification debian ftp 09/06/2026 Fail2ban — configuration avancée et filtres personnalisés bruteforce debian fail2ban 07/06/2026 Docker : comment récupérer de l'espace disque cache conteneurs debian 07/06/2026 Graylog 7 — Centralisation et analyse de logs : l'alternative à ELK sur Debian/Ubuntu centralisation debian elk 07/06/2026 OpenZFS : tiering avec L2ARC et SLOG pour les workloads mixtes cache l2arc nvme 07/06/2026 Scripting Bash avancé — pièges, bonnes pratiques et optimisation automatisation bash bonnes-pratiques 07/06/2026 AppArmor sur Debian/Ubuntu : profils, modes et confinement applicatif apparmor audit confinement 07/06/2026 Durcissement SSH — au-delà des clés publiques 2fa authentification cryptographie 27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs