Mysql dump en bash

De BlaxWiki
Révision datée du 26 janvier 2011 à 19:44 par Admin (discussion | contributions) (Page créée avec « <pre> #!/bin/bash # Declaration des variables : DATE=`date +%Y-%m-%d` VISION="/opt/agarik/Vision/bin/bb_send_raw" DISPLAY="supervision.agarik.com" TARGET="$(hostname | sed -e... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche
#!/bin/bash
# Declaration des variables :
DATE=`date +%Y-%m-%d`
VISION="/opt/agarik/Vision/bin/bb_send_raw"
DISPLAY="supervision.agarik.com"
TARGET="$(hostname | sed -e 's/\./,/g')"
SERVICE="backup"
DBPASS="ROOTPWD"
DESTDIR="/var/db_backup/CURRENT"
OLDESTDIR="/var/db_backup/OLD"
LOGDIR="/var/log/"
BIN_MYSQLDUMP="/opt/applis/mysql/bin/mysqldump"
BIN_MYSQL="/opt/applis/mysql/bin/mysql"
BIN_TMPWATCH="/usr/sbin/tmpwatch"
BIN_MKDIR="/bin/mkdir"
BIN_MV="/bin/mv"
LIFE_MESSAGE="1560"
RETENTION_TIME="192" # en heures
TYPE_BACKUP="bases" # choix possible par "bases"  ou par "tables"
BASE_LIST=""
TABLE_LIST=""

# Supervision
Send()
{
 "${VISION}" "${DISPLAY}" "status+${LIFE_MESSAGE} ${TARGET}.${SERVICE}
${1} $(date) ${SERVICE} ${2}"
}



if [ ! -d $DESTDIR ]; then $BIN_MKDIR -p $DESTDIR;
       if [ $? != 0 ]; then
               echo "Attention probleme lors des dumps de cette nuit
! Répertoire de destination $DESTDIR des dumps impossible à créer" >
$LOGDIR/sqldump.error
               color="red"
               Send "${color}" "$(cat $LOGDIR/sqldump.error)"
               exit 1
       fi
fi

if [ ! -d $OLDESTDIR ]; then $BIN_MKDIR -p $OLDESTDIR;
       if [ $? != 0 ]; then
               echo "Attention probleme lors des dumps de cette nuit
! Répertoire de destination $OLDESTDIR des dumps impossible à créer" >
$LOGDIR/sqldump.error
               color="red"
               Send "${color}" "$(cat $LOGDIR/sqldump.error)"
               exit 1
       fi
fi

#  Purge des anciens dumps :
$BIN_TMPWATCH $RETENTION_TIME $OLDESTDIR

# Deplacement du dump de la veille dans OLD :
$BIN_MV $DESTDIR/* $OLDESTDIR/


# Execution du dump :
exec 1> $LOGDIR/sqldump.ok
exec 2> $LOGDIR/sqldump.error


BASE_LIST="`$BIN_MYSQL -p$DBPASS -BN  -e \"show databases\"`"
if [ "$BASE_LIST" = "" -o  $? != 0 ]; then
       echo "Attention probleme lors des dumps de cette nuit ! Aucune
base presente ou erreur dans la command de dump" >
$LOGDIR/sqldump.error
                       color="red"
                       Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                       exit 1
fi



case $TYPE_BACKUP in
       tables)
       for dbname in $BASE_LIST ; do
               TABLE_LIST="`$BIN_MYSQL -p$DBPASS -BN  -e \"show
tables\" $dbname`"
                       if [ $? != 0 ]; then
                               echo "Attention probleme lors des
dumps de cette nuit ! Erreur dans la commande de dump" >
$LOGDIR/sqldump.error
                               color="red"
                               Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                               exit 1
                       fi
               for tablename in $TABLE_LIST; do
               $BIN_MYSQLDUMP -R --skip-lock-tables --events
--user=root --password=$DBPASS $dbname $tablename 2>
$LOGDIR/sqldump.error | gzip -c >
$DESTDIR/$dbname.$tablename.$DATE.sql.gz
               #### !! si mysqldump renvoie UNE seule fois une
erreur, le process complet s'arrete et renvoie rouge
               if [ $? -ne 0 -o -s $LOGDIR/sqldump.error ]; then
                       echo "Attention probleme lors des dumps de cette nuit!"
                       color="red"
                       Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                       exit 1
               fi
               done
       done
       ;;

       bases)
       for dbname in $BASE_LIST ; do
               $BIN_MYSQLDUMP -R --skip-lock-tables --events
--user=root --password=$DBPASS $dbname 2> $LOGDIR/sqldump.error | gzip
-c > $DESTDIR/$dbname.$DATE.sql.gz
               ## !! si mysqldump renvoie UNE seule fois une erreur,
le process complet s'arrete et renvoie rouge
               if [ $? -ne 0 -o -s $LOGDIR/sqldump.error ]; then
                       echo "Attention probleme lors des dumps de cette nuit!"
                       color="red"
                       Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                       exit 1
               fi
               done
       ;;

       *)
       echo "Attention probleme lors des dumps de cette nuit. Type de
backup non reconnu, merci de modifier la variable TYPE_BACKUP" >
$LOGDIR/sqldump.error
                       color="red"
                       Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                       exit 1
       ;;
esac

if [ `find $DESTDIR  -type f | wc -l` -gt 0 -a "`du -ks $DESTDIR | awk
{'print $1'}`" -gt 4 ] ;
       then echo "dumps des bases OK"
               else echo "Attention probleme lors des dumps de cette
nuit. Il n'y aucune base backupée ou leur taille est de zero" >>
$LOGDIR/sqldump.error
                       color="red"
                       Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                       exit 1
fi


echo "dumps des bases OK"
echo "`ls -lh $DESTDIR`"
color="green"
Send "${color}" "$(cat $LOGDIR/sqldump.ok)"
exit 0

[[Catégorie:Script]