Différences entre les versions de « Mysql dump en bash »

De BlaxWiki
Aller à la navigationAller à la recherche
Ligne 24 : Ligne 24 :
BASE_LIST=""
BASE_LIST=""
TABLE_LIST=""
TABLE_LIST=""
DUMP_ALLOPT="routines skip-lock-tables events"
DUMP_ALLOPT="routines events"
DUMP_OPT=""
DUMP_OPT=""


Ligne 47 : Ligne 47 :
         fi
         fi
done
done


if [ ! -d $DESTDIR ]; then $BIN_MKDIR -p $DESTDIR;
if [ ! -d $DESTDIR ]; then $BIN_MKDIR -p $DESTDIR;
Ligne 63 : Ligne 62 :
                 color="red"
                 color="red"
                 Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                 Send "${color}" "$(cat $LOGDIR/sqldump.error)"
    exit 1
  exit 1
         fi
         fi
fi
fi
Ligne 80 : Ligne 79 :
# Deplacement du dump de la veille dans OLD :
# Deplacement du dump de la veille dans OLD :
$BIN_MV $DESTDIR/* $OLDESTDIR/
$BIN_MV $DESTDIR/* $OLDESTDIR/


BASE_LIST="`$BIN_MYSQL -p$DBPASS -BN  -e \"show databases\"`"
BASE_LIST="`$BIN_MYSQL -p$DBPASS -BN  -e \"show databases\"`"
Ligne 91 : Ligne 87 :
                         exit 1
                         exit 1
fi
fi


case $TYPE_BACKUP in
case $TYPE_BACKUP in
         tables)
         tables)
         for dbname in $BASE_LIST ; do
         for dbname in $BASE_LIST ; do
                if [ "$dbname" = "performance_schema" ];
                then
                        DumpOpt="`echo $DUMP_OPT | sed -e "s/--events//g"` --no-data";
                else
                        DumpOpt="$DUMP_OPT";
                fi
                 TABLE_LIST="`$BIN_MYSQL -p$DBPASS -BN  -e \"show tables\" $dbname`"
                 TABLE_LIST="`$BIN_MYSQL -p$DBPASS -BN  -e \"show tables\" $dbname`"
                         if [ $? != 0 ]; then
                         if [ $? != 0 ]; then
Ligne 105 : Ligne 106 :
                         fi
                         fi
                 for tablename in $TABLE_LIST; do
                 for tablename in $TABLE_LIST; do
                         echo $BIN_MYSQLDUMP $DUMP_OPT --skip-lock-tables --user=$DBUSER  $dbname $tablename
                         echo $BIN_MYSQLDUMP $DumpOpt --skip-lock-tables --user=$DBUSER  $dbname $tablename
                         $BIN_MYSQLDUMP $DUMP_OPT --skip-lock-tables --user=$DBUSER --password=$DBPASS $dbname $tablename 2> $LOGDIR/sqldump.error | gzip -c > $DESTDIR/$dbname.$tablename.$DATE.sql.gz
                         $BIN_MYSQLDUMP $DumpOpt --skip-lock-tables --user=$DBUSER --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
                         #### !! 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
                         if [ $? -ne 0 -o -s $LOGDIR/sqldump.error ]; then
                                 echo "Attention probleme lors des dumps de cette nuit!"
                                 echo "Attention probleme lors des dumps de cette nuit!"
                                color="red"
        color="red"
                                 Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                                 Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                                 exit 1
                                 exit 1
Ligne 119 : Ligne 120 :


         bases)
         bases)
  for dbname in $BASE_LIST ; do
        for dbname in $BASE_LIST ; do
                 echo $BIN_MYSQLDUMP $DUMP_OPT --skip-lock-tables --user=$DBUSER  $dbname
                if [ "$dbname" = "performance_schema" ];
                 $BIN_MYSQLDUMP $DUMP_OPT --skip-lock-tables --user=$DBUSER --password=$DBPASS $dbname 2> $LOGDIR/sqldump.error | gzip -c > $DESTDIR/$dbname.$DATE.sql.gz
                then
                        DumpOpt="`echo $DUMP_OPT | sed -e "s/--events//g"` --no-data";
                else
                        DumpOpt="$DUMP_OPT";
                fi
                 echo $BIN_MYSQLDUMP $DumpOpt --skip-lock-tables --user=$DBUSER  $dbname
                 $BIN_MYSQLDUMP $DumpOpt --skip-lock-tables --user=$DBUSER --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
                 ## !! 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
                 if [ $? -ne 0 -o -s $LOGDIR/sqldump.error ]; then
Ligne 154 : Ligne 161 :
Send "${color}" "$(cat $LOGDIR/sqldump.ok)"
Send "${color}" "$(cat $LOGDIR/sqldump.ok)"
exit 0
exit 0
</pre>
</pre>


[[Catégorie:Script]]
[[Catégorie:Script]]

Version du 16 mars 2011 à 17:17

Ce script de dump est avancé, il permet via des variables de backuper par tables ou bases, tout en verifiant que les options de dumps sont présents dans la version de mysql

#!/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"
DBUSER="root"
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=""
DUMP_ALLOPT="routines events"
DUMP_OPT=""

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

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

for binary in $BIN_MYSQLDUMP $BIN_MYSQL $BIN_TMPWATCH $BIN_MKDIR $BIN_MV
do
        if [ ! -f $binary -a ! -x $binary ]; then
                echo "Attention probleme lors des dumps de cette nuit ! $binary n'existe pas" > $LOGDIR/sqldump.error
                color="red"
                Send "${color}" "$(cat $LOGDIR/sqldump.error)"
                exit 1

        fi
done

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

for option in $DUMP_ALLOPT
do
        if [ `$BIN_MYSQLDUMP --help |grep -c -- --$option` -gt 0 ];
        then
                DUMP_OPT="$DUMP_OPT --$option"
        fi
done

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

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

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
                if [ "$dbname" = "performance_schema" ];
                then
                        DumpOpt="`echo $DUMP_OPT | sed -e "s/--events//g"` --no-data";
                else
                        DumpOpt="$DUMP_OPT";
                fi

                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
                        echo $BIN_MYSQLDUMP $DumpOpt --skip-lock-tables --user=$DBUSER  $dbname $tablename
                        $BIN_MYSQLDUMP $DumpOpt --skip-lock-tables --user=$DBUSER --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
                if [ "$dbname" = "performance_schema" ];
                then
                        DumpOpt="`echo $DUMP_OPT | sed -e "s/--events//g"` --no-data";
                else
                        DumpOpt="$DUMP_OPT";
                fi
                echo $BIN_MYSQLDUMP $DumpOpt --skip-lock-tables --user=$DBUSER  $dbname
                $BIN_MYSQLDUMP $DumpOpt --skip-lock-tables --user=$DBUSER --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