Script de sauvegarde des bases de données MySQL
Sauvegarder le script suivant (ex: backup_mysql.sh) dans un dossier puis positionner les droits d’execution dessus (0755).
Planifier une tâche CRON à l’intervalle souhaité.
Le script
Le script va fonctionner ainsi :
- Lister toutes les bases de données sauf les bases systèmes (database, infomation_schema, etc…)
- Pour chaque base, executer un dump SQL comprenant les routines et les déclencheurs et gzip chaque fichier
- Finalement, nettoyer les anciennes sauvegardes
Le script créé 1 dossier de sauvegarde par jour. A l’issue de la sauvegarde, il y a 1 fichier « .gz » par base :

Si vous décidez d’executer la sauvegarde plusieurs fois par jours, les sauvegardes précédentes de la même journée seront écrasées.
#! /bin/bash
TIMESTAMP=$(date +"%F")
BASE_DIR=/home/sdb/backup_mysql
BACKUP_DIR="$BASE_DIR/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD='<__MON_MOT_DE_PASSE__>'
MYSQLDUMP=/usr/bin/mysqldump
mkdir -p "$BACKUP_DIR"
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`
for db in $databases; do
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases --routines --triggers $db | gzip > "$BACKUP_DIR/$db@$TIMESTAMP.gz"
done
find $BASE_DIR/* -type d -ctime +30 -exec rm -rf {} \;
Vous pouvez régler :
- BASE_DIR = chemin de destination des sauvegardes
- MYSQL_USER = votre utilisateur mysql disposant de droits suffisants pour accéder aux bases de données
- MYSQL = chemin d’accès au binaire mysql
- MYSQL_PASSWORD = mot de passe correspondant à MYSQL_USER
- MYSQLDUMP = chemin d’accès au binaire « mysqldump »
Conservation de l’antériorité des sauvegardes
Les sauvegardes sont nettoyées au bout de 30 jours gràce à cette commande :
find $BASE_DIR/* -type d -ctime +30 -exec rm -rf {} \;
Changer simplement la valeur « +30 » par le temps de conservation maximum.
Planifier la tâche
Exemple, pour planifier le lancement du script tous les jours à 1h :
0 1 * * * /path_to/backup_mysql.sh
N’oubliez pas que le script doit être executable (droits 0755) !

