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.

Retour à l'accueil