JF FAFCHAMPSsMug@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.

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.