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) !