[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 

Add a Comment

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