Mysql dump en bash
De BlaxWiki
Révision datée du 26 janvier 2011 à 19:46 par Admin (discussion | contributions)
#!/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 skip-lock-tables 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
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 $DUMP_OPT --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
#### !! 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
echo $BIN_MYSQLDUMP $DUMP_OPT --skip-lock-tables --user=$DBUSER $dbname
$BIN_MYSQLDUMP $DUMP_OPT --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
[[Catégorie:Script]