Ce script sauvegarde les bases de données MySQL d'un serveur et réalise les opérations suivantes :

  • Check de la base de donnée.
  • Analyse de la base de donnée.
  • Dump de chaque base de données dans un fichier SQL distinct.
  • Tar des fichiers SQL générés dans un seul fichier.
  • Envoi par FTP du fichier .tar.gz de sauvegarde vers un autre serveur.
  • Suppression des fichiers locaux de sauvegardes de plus de 10 jours.



1. Paramétrage du script :

#---------------------------------------------------------------#
# Paramétrage de la connection MySQL                                     #
#---------------------------------------------------------------#
 
#Nom de l'utilisateur qui lance le backup
user=nom_de_l_utilisateur
#Machine sur laquelle on se connecte
host=host_mysql
#Mot de passe de l'utilisateur de backup
pass=mot_de_passe
 
# Outil de dump
MYSQLDUMP=mysqldump
#Outil de check
MYSQLCHECK=mysqlcheck
# Options passées à MysqlDUMP
OPTIONS="--add-drop-database  --add-drop-table --complete-insert --routines --triggers --allow-keywords --max_allowed_packet=50M --force"
 
 
#---------------------------------------------------------------#
# Paramétrage de la sauvegarde                                  #
#---------------------------------------------------------------#
 
# Répertoire temporaire pour stocker les backups
TEMPORAIRE="/tmp/backup_mysql"
 
# Nom du serveur
MACHINE="$(hostname)"
 
# Variable contenant la liste des bases de données
BASES=""
 
# Date
DATE="$(date +"%d-%m-%Y")"
DATE2=`date --date '10 days ago' "+%d-%m-%Y"`
 
# Nom des fichiers de backup
# Répertoire de destination du backup
DESTINATION="/home/backups/mysql"
FICHIER_BACKUP=$MACHINE"_BACKUP_MYSQL_"$DATE".tar.gz"
FICHIER_EFFACER=$MACHINE"_BACKUP_MYSQL_"$DATE2".tar.gz"
 
#Informations FTP
LOGIN_FTP=login_ftp
PASS_FTP=mot_de_passe_ftp
HOST_FTP=serveur_ftp



Vous pouvez paramétrer les options passées à MysqlDUMP dans la variable OPTIONS. Dans le script de base les options suivantes ont été paramétrées :
--add-drop-database : ajoute les énoncés "DROP DATABASES"
--add-drop-table : ajoute les énoncés "Drop TABLE"
--routines : Sauvegarde les procédures et les fonctions pour chaque table
--triggers : sauvegarde les triggers de chaque table
--allow-keywords : Autorise les noms de colonnes étant des mots clés MySQL
--max_allowed_packet=50M : fixe la taille maxi des paquets envoyés à 50Mo
--force : permet d'ignorer les erreurs



2. Process de sauvegarde

#---------------------------------------------------------------#
# Process de sauvegarde                                         #
#---------------------------------------------------------------#
 
# Création du répertoire temporaire
if [ -d $TEMPORAIRE ];
then
	echo "Le repertoire existe";
else
	mkdir $TEMPORAIRE;
fi
 
 
# On construit la liste des bases de données
BASES="$(mysql -u $user -h $host -p$pass -Bse 'show databases')"
 
# On lance le dump des bases
for db in $BASES
do
	#On lance un check et une analyse pour chaque base de donnée
	$MYSQLCHECK -u $user -h $host -p$pass -c -a $db
	# On lance un mysqldump pour chaque base de donnée
        $MYSQLDUMP -u $user -h $host -p$pass $OPTIONS $db -R > $TEMPORAIRE"/"$MACHINE"-"$db"-"$DATE".sql";
done
 
 
# Création de l'archive contenant tout les dump
#Cette archive est stockée dans le dossier défini pour la sauvegarde
if [ -d $DESTINATION ]; then
    cd $TEMPORAIRE
    tar -cvzf $DESTINATION"/"$FICHIER_BACKUP *
fi
 
 
# On transfere l'archive par FTP
	cd $DESTINATION
	ftp -v -n $HOST_FTP <<SCRIPT
	user $LOGIN_FTP $PASS_FTP 
	bin 
	put $FICHIER_BACKUP 
	bye
	SCRIPT
 
 
# On supprime le fichier de plus de x jours
if [ -f $DESTINATION"/"$FICHIER_EFFACER ]; then
    rm $DESTINATION"/"$FICHIER_EFFACER
fi
 
# On suprime le répertoire temporaire
if [ -d fichier ]; then
	rm -Rf $TEMPORAIRE
fi



Vous pouvez télécharger ce script au complet en cliquant ici.