Sauvegarde MySQL automatique
mysqldump, cron et chiffrement, du script à la restauration.
Automatiser les sauvegardes de MySQL ou MariaDB tient en quelques lignes de mysqldump et de cron. Voici la méthode complète, puis ses limites en production.
Le code fonctionne avec le client MySQL ou MariaDB standard.
1. Exporter une base avec mysqldump
mysqldump exporte une base dans un fichier SQL. Compressez-le à la volée pour gagner de la place, et utilisez un fichier d'options pour ne jamais écrire le mot de passe sur la ligne de commande.
# ~/.my.cnf (chmod 600) contient les identifiants :
# [client]
# user=backup
# password=secret
mysqldump --single-transaction --quick ma_base | gzip > /var/backups/ma_base_$(date +%F).sql.gz
--single-transaction évite de verrouiller les tables InnoDB pendant l'export.
2. Automatiser avec cron
Placez la commande dans un script avec une rétention, puis planifiez-le.
#!/usr/bin/env bash
set -euo pipefail
DEST=/var/backups/mysql
mkdir -p "$DEST"
mysqldump --single-transaction --quick ma_base | gzip > "$DEST/ma_base_$(date +%F_%H%M).sql.gz"
find "$DEST" -name '*.sql.gz' -mtime +7 -delete
Dans crontab -e : 30 2 * * * /usr/local/bin/backup-mysql.sh (tous les jours à 2 h 30).
3. Chiffrer et externaliser
Chiffrez le dump avec age, puis copiez-le hors du serveur, vers un bucket S3 chez un autre fournisseur ou dans une autre région.
age -r age1exemple... -o ma_base.sql.gz.age ma_base.sql.gz
aws s3 cp ma_base.sql.gz.age s3://mon-bucket/mysql/
4. Restaurer
Pour restaurer, déchiffrez, décompressez, puis réimportez dans une base de test séparée, jamais en production.
age -d -i ma_cle.txt ma_base.sql.gz.age | gunzip | mysql ma_base_restauree
Les limites de mysqldump + cron
- Un cron qui échoue le fait en silence : vous ne le voyez que le jour de la restauration.
- Aucune alerte si le serveur est éteint, plein, ou si mysqldump plante.
- Rétention, chiffrement, envoi hors-site et rotation des clés sont à maintenir à la main.
- Sur de grosses bases, un mysqldump non optimisé peut ralentir la production.
- Une sauvegarde jamais testée n'est pas une sauvegarde.
Faites-le en 5 minutes avec rlbk
rlbk installe un agent léger sur votre serveur, planifie vos sauvegardes MySQL et MariaDB, les chiffre avec age sur place, les envoie chez rlbk ou dans votre propre bucket S3, et vous alerte au moindre échec.
Vous testez vos restaurations dans un environnement isolé, sans jamais toucher à la production.