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 :

  1. Lister toutes les bases de données sauf les bases systèmes (database, infomation_schema, etc…)
  2. Pour chaque base, executer un dump SQL comprenant les routines et les déclencheurs et gzip chaque fichier
  3. 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) !

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *