sMug@replicatorbe
~/Publications/Infrastructure/backup-auto-mysql-avec-docker-mode-easy-en-quelques-minutes

Backup auto MySQL avec Docker (mode easy, en quelques minutes)

Infrastructure / /2 min de lecture

Sauvegarder une base MySQL qui tourne dans un conteneur, sans rien installer sur l'hôte : un conteneur jetable qui fait le mysqldump, un script de trois lignes, une entrée cron toutes les quatre heures.

Note ajoutée depuis : deux choses ont vieilli dans ce billet. --link est déprécié, remplacé par les réseaux Docker (--network) ; et je ne passerais plus un mot de passe en clair sur la ligne de commande — il se retrouve dans ps, dans l'historique du shell et dans les métadonnées du conteneur. Un fichier d'environnement lu par --env-file, avec les droits qui vont bien, coûte exactement le même effort. Le texte reste tel qu'il a été écrit ; c'est le jalon « conteneurs » de mon parcours, pris sur le vif. Huit ans plus tard, j'en ai écrit le contrepoint : ce que j'ai arrêté de faire avec Docker sur un petit serveur.

Il est intéressant (et vivement recommandé) d'effectuer des backups automatiques avec Docker. Pour réaliser un backup automatique et rapidement, il suffit de réaliser :

docker run --rm --link root_database3_1:dbserver -v /hostdir/:/backup -e DBUSER=root -e DBPASS=password -e DATABASE=base -e BACKUP_NAME=nomdelabdd thomass/mysqldump backup

On va chercher le conteneur thomass/mysqldump et effectuer l'action « backup » du conteneur, qui consiste à faire un mysqldump.

Pour automatiser cela très rapidement et effectuer des backups réguliers, on peut créer un petit script bash :

#!/bin/bash
echo 'Backup en cours'
docker run --rm --link root_database3_1:dbserver -v /root/backup/:/backup -e DBUSER=monloginroot -e DBPASS=monpassaleatoire -e DATABASE=test -e BACKUP_NAME="test-$RANDOM" thomass/mysqldump backup
echo 'Fin du backup'

Pour finaliser tout ça, on peut ajouter une tâche cron qui va le lancer selon nos besoins :

0 */4 * * * /home/truc/backup.sh

Dans ce cas-ci, il sera exécuté toutes les 4 heures.