MariaDB : sauvegarde et restauration
La sauvegarde logique (mariadb-dump) produit un fichier SQL qui recrée les bases. Elle convient aux volumes petits à moyens.
Sauvegarder une base
Section intitulée « Sauvegarder une base »mariadb-dump -u app -p --single-transaction boutique > boutique.sql--single-transaction produit un instantané cohérent des tables InnoDB sans les verrouiller.
Options utiles
Section intitulée « Options utiles »| Option | Effet |
|---|---|
--single-transaction |
Instantané cohérent (InnoDB), sans verrou |
--routines --triggers --events |
Inclut procédures, déclencheurs et événements |
--no-data |
Structure seulement |
--no-create-info |
Données seulement |
--databases a b |
Plusieurs bases, avec CREATE DATABASE |
--all-databases |
Toutes les bases |
--ignore-table=boutique.journaux |
Exclut une table |
Sauvegarder toutes les bases
Section intitulée « Sauvegarder toutes les bases »sudo mariadb-dump --all-databases --single-transaction --routines --triggers --events > toutes.sqlEn root local, sudo suffit (authentification unix_socket).
Compresser
Section intitulée « Compresser »sudo mariadb-dump --single-transaction --databases boutique | gzip > boutique-$(date +%F).sql.gzVérifier l’archive : gzip -t boutique-2026-01-01.sql.gz et zcat boutique-2026-01-01.sql.gz | head.
Restaurer
Section intitulée « Restaurer »sudo mariadb -e "CREATE DATABASE IF NOT EXISTS boutique CHARACTER SET utf8mb4;"sudo mariadb boutique < boutique.sqlzcat boutique-2026-01-01.sql.gz | sudo mariadbPour une sauvegarde faite avec --databases ou --all-databases, ne pas préciser de base à la restauration : le fichier contient les CREATE DATABASE et USE.
Compte dédié à la sauvegarde
Section intitulée « Compte dédié à la sauvegarde »CREATE USER 'sauvegarde'@'localhost' IDENTIFIED VIA unix_socket;GRANT SELECT, SHOW VIEW, TRIGGER, EVENT, LOCK TABLES ON *.* TO 'sauvegarde'@'localhost';Avec un compte système sauvegarde, la sauvegarde ne nécessite aucun mot de passe.
Automatiser avec systemd
Section intitulée « Automatiser avec systemd »Script /usr/local/bin/sauvegarde-mariadb :
#!/bin/bashset -euo pipefaildossier=/var/backups/mariadbmkdir -p "$dossier"mariadb-dump --all-databases --single-transaction --routines --triggers --events \ | gzip > "$dossier/toutes-$(date +%F).sql.gz"find "$dossier" -name 'toutes-*.sql.gz' -mtime +14 -deletesudo chmod 750 /usr/local/bin/sauvegarde-mariadbService /etc/systemd/system/sauvegarde-mariadb.service :
[Unit]Description=Sauvegarde MariaDB
[Service]Type=oneshotExecStart=/usr/local/bin/sauvegarde-mariadbMinuteur /etc/systemd/system/sauvegarde-mariadb.timer :
[Unit]Description=Sauvegarde MariaDB quotidienne
[Timer]OnCalendar=*-*-* 03:00:00Persistent=true
[Install]WantedBy=timers.targetsudo systemctl daemon-reloadsudo systemctl enable --now sauvegarde-mariadb.timersystemctl list-timers sauvegarde-mariadb.timerLe service tourne en root : il se connecte par unix_socket. Voir systemd : minuteurs.
Copie physique
Section intitulée « Copie physique »sudo apt install mariadb-backupsudo mariadb-backup --backup --target-dir=/var/backups/mariadb-physiquesudo mariadb-backup --prepare --target-dir=/var/backups/mariadb-physiqueLa copie physique est plus rapide pour de gros volumes. La restauration exige un serveur arrêté et un dossier de données vide (mariadb-backup --copy-back) : lire la documentation avant usage.
Bonnes pratiques
Section intitulée « Bonnes pratiques »- Appliquer la règle 3-2-1 : 3 copies, 2 supports, 1 hors du serveur.
- Tester régulièrement la restauration : une sauvegarde non testée est une hypothèse.
- Protéger les fichiers (
chmod 600, dossier réservé) : ils contiennent toutes les données. - Sauvegarder aussi
/etc/mysql/.
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
Access denied … when using LOCK TABLES |
Ajouter --single-transaction ou le droit LOCK TABLES |
mariadb-dump: command not found |
Ancien nom : utiliser mariadb-dump (paquet mariadb-client) |
| Restauration très lente | Fichier volumineux : SET autocommit=0 en tête du fichier et COMMIT; à la fin, ou sauvegarde physique |
ERROR 1062 Duplicate entry à la restauration |
Données déjà présentes : restaurer dans une base vide |
Got a packet bigger than 'max_allowed_packet' |
Augmenter max_allowed_packet dans la configuration |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »mariadb-dump existe sur les deux versions. Pour restaurer une sauvegarde faite sur 10.11 dans 11.8, tester d’abord sur une instance de test, puis lancer sudo mariadb-upgrade si une erreur de table apparaît.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuel :
man mariadb-dump - Retour : Installation