Il était temps que je mettes en place un système de sauvegarde automatisé, car avec la multiplication des clients et donc des base de données, cela commençait à devenir un peu galère à gérer.

Je voulais donc créer un petit système rapide à mettre en place afin de ne pas perdre trop de temps, et en même temps j'aillais pouvoir combler mes lacunes en créations de scripts shell sous linux.

Effectivement durant ma carrière, j'ai souvent créer des batch sous windows mais très rarement sous unix/linux.
Donc pour créer un script sous débian il faut créer un fichier que je nommerais dumpdb sans extension.

 $ touch dumpdb 

ensuite ne pas oublier de permettre l'execution de ce fichier

$ chmod +x dumpdb 

avec l'editeur de texte de votre choix, éditer le fichier et nous allons dans un premier temps créer nos paramètres dont vous avons besoin. Mais avant tout la première ligne à écrire est celle-là.

#!/bin/bash

Cette ligne permet d'indiquer quel type de batch nous allons écrire, dans ce cas nous utiliserons bash.

Ce que je voulais à la base c'est sauvegarder automatiquement mes bases dans un dossier, que le fichier de sauvegarde contienne la date de sauvegarde et le nom de la base de données.

 

1 . Traitement de la date

Nous allons utiliser la commande date, en regardant les paramètres on s'apperçoit que l'on peu formater la date de sortie. Ce qui m'interresse c'est d'avoir dans l'ordre l'année le mois et le jour, ce qui me permettra d'avoir un classement plus facile des fichiers.

$ date +"%Y%m%d" 

 

2 . Paramètres pour le script

On prends donc notre editeur de texte afin de modifier notre fichier, et nous allons entrer nos paramètres dans des variables afin de pouvoir réutiliser facilement notre script. Donc nous avons besoin d'un nom d'utilisateur de la base ainsi que son mot de passe, un répertoire de destination pour les fichier dumps et le nom des bases de données à sauvegarder.

#!/bin/bash
# paramètres base de données
DB_USER="dbuser"
DB_PSWD="password"
dbnames=("dbname1" "dbname2" "dbname3")
# répertoire de sauvegarde
DST_PATH="/home/USER/saves_mysql"
# Date du fichier
CURRENT_DATE=$(date +"%Y%m%d")

3 . La routine de sauvegarde

Pour créer la routine de sauvegarde, celle qui va prendre chaque base de donnée du tableau dbnames et créer un fichier de sauvegarde; nous allons utiliser une boucle for. Et pour créer le dump de la base mysql, je vais utiliser  la commande mysqldump. Pour ce faire nous allons ajouter ces lignes à notre script.

# sauvegarde
for DB_NAME in ${dbnames[*]}
  do
    # definition du nom du fichier
    FICHIER=$CURRENT_DATE.save.$DB_NAME.sql
    # dump de la base
    mysqldump -u $DB_USER -p$DB_PSWD --databases $DB_NAME > $DST_PATH/$FICHIER
  done

 

4 . Executer le script

Il suffit ensuite pour executer le script de taper la commande dumpdb. Bien sur le script est simple, ne gère pas les erreurs, n'envoi pas de messages, mais il fait le travail qu'on lui demande. Il vous reste donc à l'améliorer ou attendre que je l'améliore au fur et à mesure de mes besoins.

Vous pouvez l'associer à une tache Cron afin que celui-ci se répéte tous les jours.

En attendant vous trouverez le script complet sur GitHub