C'est en baillant que la loutre le dit:

Loutre avec écouteurs

Linux : Script simple pour backup de bases de données MySQL

dim, 11/07/2010 - 14:03 -- mzw

J’ai écrit un petit script simple pour faire un backup complet de toutes les bases de données MySQL qui sont sur le système.

Il suffit de créer un fichier avec le code suivant en modifiant « utilisateur » et « motdepasse » en fonction de ton système (l’utilisateur ici doit avoir un accès aux bases de données).

Ensuite, tu rends le code exécutable (chmod +x lescript), puis tu l’execute en root (ou en utilisateur normal si t’as les droits sur le répertoire défini ci-dessous).

#! /bin/sh
DATE=`date '+%Y.%m.%d'` # définition de la date
FOLDER=/home/backups # définition du répertoire où sauvegarder
MYSQLUSER=utilisateur # utilisateur msyql ...
MYSQLPASSWD=motdepasse # ... et son mot de passe
DATABASES=`mysql -u $MYSQLUSER -p$MYSQLPASSWD -e 'SHOW DATABASES' | sed '1,2d'` # définition de la liste des bases

[ -d $FOLDER ] || mkdir $FOLDER # On commence par créer le répertoire défini plus haut s'il n'existe pas.

for i in $DATABASES; do
echo "Dumping $i... database" in $FOLDER ;
mysqldump -u $MYSQLUSER -p$MYSQLPASSWD $i > $FOLDER/$i.$DATE.sql ; # voici le dumping MySQL dans une boucle for
done
echo "`echo $DATABASES | wc -w` Databases were backed up in $FOLDER"

Note à propos de la définition de la variable DATABASES : le sed à la fin permet de supprimer les deux premières lignes, ici Databases et information_schema qu’on ne va pas utiliser. Pour mieux comprendre, exécute la commande

$ mysql -u user -p -e 'SHOW DATABASES'

ou

$ mysql -u user -p -e 'SHOW DATABASES' | cat

(pour un format traité par bash)

Il est tout à fait possible de faire en sorte qu’il s’exécute automatiquement, il suffit de placer ce script dans le bon répertoire Cron : /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/

Attention : un script situé dans un répertoire cron ne peut pas contenir de caractères spéciaux (espace, underscore). Une fois le script en place, on peut tester les repertoires et voir ce qui va s'exécuter lors du cron en tappant :

$ run-parts --test /etc/cron.<dossier>

Commentaires

Parfait, c'est exactement ce que je cherchais. Je suis en pleine migration de mon site http://www.vtt-occasion.fr (changement d'hébergeur) et ce n'est pas une mince affaire !
Merci beaucoup pour le partage de script !

Dans le cas d'une simple migration tu fais juste un mysqldump de ta base de donnée, pas besoin d'un script de backup...

Merci pour ce script, il est une bonne base avant de se lancer dans des commandes plus complexes!