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... »)
#!/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]