24 juillet 2017
[Bash] Script pour dumper des bases MySQL
#!/bin/bash
#
# MySQL_DB_Dump
#
# Auteur : Johan
# Contact : johan@slashroot.fr
# Date : 13/07/2011
# Version : 1.0
# Description : Dump une base donnee MySQL
# Commentaire : Le fichier de dump peut etre envoye par email
# Requis : Besoin de mutt si l'option -m est selectionnee
#
#
# Usage
#
usage(){
echo ""
echo "Utilisation : mysql_db_dump -s server_name -u mysql_user -p file/password -b database1,database2... -d save_folder [-m adresse@domain.com]"
echo ""
echo "OPTIONS :"
echo " -h Affiche l'aide"
echo " -u Utilisateur MySQL a utilise pour le dump"
echo " -s Serveur contenant la base de données"
echo " -p Type d'authentification a utiliser (prompt du password ou fichier ~/.my.cnf)"
echo " -b Specifie la ou les bases a dumper"
echo " -d Dossier a utiliser pour stocker les dumps"
echo " -m Envoi le fichier de dump par email"
echo ""
echo "EXEMPLE :"
echo " - Dump des bases db1 et db2 avec une authentification par fichier et l'envoi des fichiers par email"
echo " mysql_db_dump -s localhost -u bob -p file -b db1,db2 -m dba@slashroot.fr"
echo ""
}
#
# getopts
#
while getopts "s:u:p:b:d:m:h" opt; do
case $opt in
s)
serveur=$OPTARG
;;
u)
user=$OPTARG
;;
p)
auth=$OPTARG
;;
b)
bases=$OPTARG
;;
m)
dest=$OPTARG
if [ ! -f /bin/mutt ] ; then
echo "ERREUR - L'utilitaire mutt est introubable"
exit 1
fi
;;
d)
folder=$OPTARG
;;
h)
usage
exit 0
;;
\?)
usage
exit 1
;;
🙂
usage
exit 1
;;
esac
done
#
# Variables et verifications
#
# Verification des parametres choisis
if [[ $# -eq 0 || -z $serveur || -z $user || -z $auth || -z $bases || -z $folder ]] ; then
usage
exit 1
fi
# Verification du dossier de sauvegarde
if [ ! -d $folder ] ; then
echo "ERREUR - Le dossier cense accueillir les dumps est introuvable"
exit 1
fi
# Verification de l'authentification choisi
if [ $auth == "file" ] ; then
if [ ! -f ~/.my.cnf ] ; then
echo " ERREUR - Le fichier .my.cnf est introuvable"
# exit 1
else
if [ $(stat -c %a ~/.my.cnf) != 600 ] ; then
echo "Warning - Votre fichier ~/.my.cnf n'a pas les droits recommandes"
fi
fi
elif [ ! $auth == "password" ] ; then
usage
exit 1
fi
# Date du jour
date=`date +%m-%d-%Y`
host=`hostname`
res="\n"
#
# Au boulot
#
# Pour chaque base
for base in $(echo $bases | sed "s/,/ /g") ; do
dump="$folder/dump-$base-$date.sql"
if [[ $auth == "file" ]] ; then
mysqldump -u $user $base > $dump
else
mysqldump -u $user -p $base > $dump
fi
gzip $dump
if [ -n $dest ] ; then
echo "" | mutt -s "[Save-SQL] Dump base $base du $date" -a ""$dump".gz" -- $dest
fi
done