Différences entre les versions de « Mysql dump en bash »
De BlaxWiki
Aller à la navigationAller à la recherche (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... ») |
|||
| Ligne 7 : | Ligne 7 : | ||
TARGET="$(hostname | sed -e 's/\./,/g')" | TARGET="$(hostname | sed -e 's/\./,/g')" | ||
SERVICE="backup" | SERVICE="backup" | ||
DBUSER="root" | |||
DBPASS="ROOTPWD" | DBPASS="ROOTPWD" | ||
DESTDIR="/var/db_backup/CURRENT" | DESTDIR="/var/db_backup/CURRENT" | ||
| Ligne 21 : | Ligne 22 : | ||
BASE_LIST="" | BASE_LIST="" | ||
TABLE_LIST="" | TABLE_LIST="" | ||
DUMP_ALLOPT="routines skip-lock-tables events" | |||
DUMP_OPT="" | |||
# Supervision | # Supervision | ||
Send() | Send() | ||
{ | { | ||
"${VISION}" "${DISPLAY}" "status+${LIFE_MESSAGE} ${TARGET}.${SERVICE} | "${VISION}" "${DISPLAY}" "status+${LIFE_MESSAGE} ${TARGET}.${SERVICE} ${1} $(date) ${SERVICE} ${2}" | ||
${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 [ ! -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 | |||
! Répertoire de destination $DESTDIR des dumps impossible à créer" > | color="red" | ||
$LOGDIR/sqldump.error | Send "${color}" "$(cat $LOGDIR/sqldump.error)" | ||
exit 1 | |||
fi | |||
fi | fi | ||
if [ ! -d $OLDESTDIR ]; then $BIN_MKDIR -p $OLDESTDIR; | 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 | |||
! Répertoire de destination $OLDESTDIR des dumps impossible à créer" > | color="red" | ||
$LOGDIR/sqldump.error | Send "${color}" "$(cat $LOGDIR/sqldump.error)" | ||
exit 1 | |||
fi | |||
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 : | # Purge des anciens dumps : | ||
| Ligne 60 : | Ligne 80 : | ||
BASE_LIST="`$BIN_MYSQL -p$DBPASS -BN -e \"show databases\"`" | BASE_LIST="`$BIN_MYSQL -p$DBPASS -BN -e \"show databases\"`" | ||
if [ "$BASE_LIST" = "" -o $? != 0 ]; then | 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 | |||
base presente ou erreur dans la command de dump" > | color="red" | ||
$LOGDIR/sqldump.error | Send "${color}" "$(cat $LOGDIR/sqldump.error)" | ||
exit 1 | |||
fi | fi | ||
| Ligne 78 : | Ligne 93 : | ||
case $TYPE_BACKUP in | case $TYPE_BACKUP in | ||
tables) | |||
for dbname in $BASE_LIST ; do | |||
TABLE_LIST="`$BIN_MYSQL -p$DBPASS -BN -e \"show tables\" $dbname`" | |||
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" | |||
dumps de cette nuit ! Erreur dans la commande de dump" > | Send "${color}" "$(cat $LOGDIR/sqldump.error)" | ||
$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 | |||
--user= | echo "Attention probleme lors des dumps de cette nuit!" | ||
$LOGDIR/sqldump.error | gzip -c > | color="red" | ||
$DESTDIR/$dbname.$tablename.$DATE.sql.gz | Send "${color}" "$(cat $LOGDIR/sqldump.error)" | ||
exit 1 | |||
erreur, le process complet s'arrete et renvoie rouge | fi | ||
done | |||
done | |||
;; | |||
bases) | |||
for dbname in $BASE_LIST ; do | |||
echo $BIN_MYSQLDUMP $DUMP_OPT --skip-lock-tables --user=$DBUSER $dbname | |||
--user= | $BIN_MYSQLDUMP $DUMP_OPT --skip-lock-tables --user=$DBUSER --password=$DBPASS $dbname 2> $LOGDIR/sqldump.error | gzip -c > $DESTDIR/$dbname.$DATE.sql.gz | ||
-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 | |||
le process complet s'arrete et renvoie rouge | 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 | |||
backup non reconnu, merci de modifier la variable TYPE_BACKUP" > | color="red" | ||
$LOGDIR/sqldump.error | Send "${color}" "$(cat $LOGDIR/sqldump.error)" | ||
exit 1 | |||
;; | |||
esac | esac | ||
if [ `find $DESTDIR -type f | wc -l` -gt 0 -a "`du -ks $DESTDIR | awk | if [ `find $DESTDIR -type f | wc -l` -gt 0 -a "`du -ks $DESTDIR | awk {'print $1'}`" -gt 4 ] ; | ||
{'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" | |||
nuit. Il n'y aucune base backupée ou leur taille est de zero" >> | Send "${color}" "$(cat $LOGDIR/sqldump.error)" | ||
$LOGDIR/sqldump.error | exit 1 | ||
fi | fi | ||
Version du 26 janvier 2011 à 19:46
#!/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]