KYOSH1RO

◀ Cheatsheets / BASES DE DONNÉES

MariaDB — Sauvegarde et restauration

Sauvegarder et restaurer MariaDB avec mariadb-dump : bases complètes, tables, compression, vérification, Docker, automatisation et bonnes pratiques.

Filtrer
mariadb-dump crée une sauvegarde logique sous forme de commandes SQL. Le fichier obtenu peut recréer les tables et réinsérer les données avec le client mariadb.
mariadb-dump sert à exporter. Pour restaurer, utiliser le client mariadb, pas mariadb-dump.

Avant de sauvegarder

4 cmds
● Vérifier l'espace disponible sur le disque de destination
● Utiliser un compte dédié avec les privilèges strictement nécessaires
● Ne pas mettre le mot de passe directement dans la ligne de commande
● Tester régulièrement une restauration sur une base isolée
● Conserver une copie hors de la machine hébergeant MariaDB
mariadb --versionVersion du client
mariadb-dump --versionVersion de l'outil de sauvegarde
mariadb -u root -p -e "SHOW DATABASES;"Vérifier la connexion et lister les bases
df -h /backupVérifier l'espace disponible

Sauvegarder une base complète

2 cmds
mariadb-dump -u backup -p --databases application > application.sqlStructure et données
mariadb-dump -u backup -p --single-transaction --routines --events --triggers --databases application > application.sqlDump InnoDB complet
--single-transaction produit un instantané cohérent sans verrouiller les tables InnoDB. Il ne garantit pas la même cohérence pour les moteurs non transactionnels comme MyISAM, et les modifications de structure sont à éviter pendant l'export.

Sauvegarder plusieurs bases ou tout le serveur

2 cmds
mariadb-dump -u backup -p --single-transaction --routines --events --databases app1 app2 > applications.sqlPlusieurs bases
mariadb-dump -u backup -p --single-transaction --routines --events --all-databases > toutes-les-bases.sqlToutes les bases
Une sauvegarde --all-databases peut contenir des comptes et objets système sensibles. Protéger le fichier et vérifier sa compatibilité avant une restauration vers un autre serveur.

Sauvegarder des tables précises

4 cmds
mariadb-dump -u backup -p application utilisateurs commandes > tables.sqlDeux tables
mariadb-dump -u backup -p --no-data application > structure.sqlStructure uniquement
mariadb-dump -u backup -p --no-create-info application > donnees.sqlDonnées uniquement
mariadb-dump -u backup -p --where="created_at >= '2026-01-01'" application commandes > commandes-2026.sqlSous-ensemble de lignes

Options recommandées

8 cmds
--single-transactionInstantané cohérent pour InnoDB
--routinesInclure procédures et fonctions
--eventsInclure les événements planifiés
--triggersInclure explicitement les triggers
--hex-blobExporter les données binaires en hexadécimal
--default-character-set=utf8mb4Utiliser utf8mb4
--quickLire les lignes progressivement
mariadb-dump -u backup -p --single-transaction --routines --events --triggers --hex-blob --default-character-set=utf8mb4 --databases application > application.sql

Compresser la sauvegarde

7 cmds
mariadb-dump -u backup -p --single-transaction --routines --events --databases application | gzip -9 > application-$(date +%F).sql.gzExport compressé
mariadb-dump -u backup -p --single-transaction --databases application | zstd -T0 -10 -o application-$(date +%F).sql.zstCompression zstd
Vérifier les fichiers
gzip -t application.sql.gzTester l'intégrité gzip
zstd -t application.sql.zstTester l'intégrité zstd
sha256sum application.sql.gz > application.sql.gz.sha256Créer une somme de contrôle
sha256sum -c application.sql.gz.sha256Vérifier la somme de contrôle
ls -lh application*Contrôler la taille des fichiers

Inspecter un dump

3 cmds
head -n 30 application.sqlLire le début du dump
grep -n "CREATE TABLE" application.sqlLister les définitions de tables
zgrep -n "CREATE TABLE" application.sql.gzChercher dans un dump gzip
La présence d'un fichier non vide ne prouve pas qu'il est restaurable. Le meilleur test reste une restauration complète dans une base temporaire.

Restaurer un dump contenant CREATE DATABASE

3 cmds
Les dumps créés avec --databases ou --all-databases contiennent les instructions de création et de sélection des bases.
mariadb -u restore -p < application.sqlRestaurer un dump non compressé
gunzip -c application.sql.gz | mariadb -u restore -pRestaurer depuis gzip
zstd -dc application.sql.zst | mariadb -u restore -pRestaurer depuis zstd

Restaurer dans une base existante

2 cmds
mariadb -u root -p -e "CREATE DATABASE application CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"Créer la base
mariadb -u restore -p application < application.sqlImporter le dump
Si le dump contient déjà CREATE DATABASE et USE, ne pas ajouter inutilement un nom de base à la commande de restauration.

Tester une restauration isolée

5 cmds
mariadb-dump -u backup -p --single-transaction application > application-sans-create-database.sql
mariadb -u root -p -e "CREATE DATABASE restauration_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mariadb -u restore -p restauration_test < application-sans-create-database.sql
mariadb -u root -p restauration_test -e "SHOW TABLES;"
mariadb -u root -p restauration_test -e "SELECT COUNT(*) AS tables_presentes FROM information_schema.tables WHERE table_schema='restauration_test';"
● Les tables attendues sont présentes
● Les volumes de lignes sont cohérents
● Les vues, triggers, routines et événements nécessaires existent
● L'application peut se connecter à la base restaurée
● Les caractères accentués et données binaires sont corrects

Sauvegarde et restauration avec Docker Compose

2 cmds
Créer le dump depuis le conteneur
docker compose exec -T db sh -c 'mariadb-dump -u root -p"$MARIADB_ROOT_PASSWORD" --single-transaction --routines --events --databases application' > application.sql
Restaurer dans le conteneur
docker compose exec -T db sh -c 'mariadb -u root -p"$MARIADB_ROOT_PASSWORD"' < application.sql
Le nom db correspond au service Docker Compose, pas nécessairement au nom du conteneur. Adapter le nom de la base et les variables d'environnement à la stack.

Éviter le mot de passe dans l'historique

7 cmds
Saisie interactive
mariadb-dump -u backup -p --databases application > application.sqlDemande le mot de passe
Fichier d'options protégé
install -m 600 /dev/null ~/.my.cnfCréer un fichier lisible uniquement par le propriétaire
[client]
user=backup
password=mot-de-passe
host=localhost
mariadb-dump --defaults-extra-file=~/.my.cnf --single-transaction --databases application > application.sql
Un fichier d'options contient un secret en clair. Limiter ses permissions à 600, protéger les sauvegardes et préférer un gestionnaire de secrets lorsqu'il est disponible.

Automatiser une sauvegarde quotidienne

9 cmds
#!/bin/bash
set -euo pipefail
DEST="/backup/mariadb"
DATE="$(date +%F_%H-%M-%S)"
mkdir -p "$DEST"
mariadb-dump --defaults-extra-file=/root/.my.cnf --single-transaction --routines --events --triggers --databases application | gzip -9 > "$DEST/application-$DATE.sql.gz"
gzip -t "$DEST/application-$DATE.sql.gz"
sha256sum "$DEST/application-$DATE.sql.gz" > "$DEST/application-$DATE.sql.gz.sha256"
find "$DEST" -type f -name 'application-*.sql.gz*' -mtime +30 -delete
Planification cron
30 2 * * * /usr/local/sbin/backup-mariadb.sh >> /var/log/backup-mariadb.log 2>&1Chaque nuit à 02:30

Diagnostic

4 cmds
echo $?Code retour de la dernière commande
tail -n 100 /var/log/backup-mariadb.logDernières lignes du journal
mariadb -u root -p -e "SHOW WARNINGS;"Avertissements de la session
mariadb -u root -p -e "SHOW PROCESSLIST;"Requêtes en cours

Sauvegardes volumineuses

Pour de très grandes bases ou des restaurations rapides, une sauvegarde physique avec mariadb-backup peut être plus adaptée. mariadb-dump reste simple et portable, mais produit des fichiers plus volumineux et des restaurations plus longues.

Bonnes pratiques

● Appliquer la règle 3-2-1 : trois copies, deux supports, une copie hors site
● Chiffrer les sauvegardes contenant des données sensibles
● Surveiller la taille, la date et le code retour de chaque sauvegarde
● Inclure routines et événements lorsqu'ils sont utilisés
● Ne pas faire confiance à un dump jamais restauré
● Documenter l'ordre exact de restauration de l'application
● Tester périodiquement le plan de reprise complet

Aucune commande ne correspond à ce filtre.