Files
clients/dumpscript.sh
admin 80224e09b1 스크립트파일
git-svn-id: svn://192.168.0.12/source@336 8346c931-da38-4b9b-9d4c-e48b93cbd075
2017-01-06 10:23:35 +00:00

168 lines
4.2 KiB
Bash

#!/bin/bash
LOG_PATH="$HOME/log"
LOG_FILENAME="dumplog.log"
BACKUP_PATH="/media/testdb/dump"
BACKUP_TOTALPATH="$BACKUP_PATH/$1"
BACKUP_FILENAME=$1
MYSQL_USER="admin"
MYSQL_PASSWORD="admin123"
DATABASE_GROUPONE=(1 7 13 19 25)
DATABASE_GROUPTWO=(3 9 15 21 27)
DATABASE_GROUPTHREE=(5 11 17 23 29)
DATABASE_ONENAME="CTBBG1"
DATABASE_TWONAME="CTBBG2"
DATABASE_THREENAME="CTBBG3"
DAYOFMONTH=$(date +"%e")
IFS=$'\012'
# Log
insertlogger()
{
logger "$0 : $1" && echo "$0 : $1" 1>&2
}
insertlog()
{
if [ ! -d $LOG_PATH ];then
if ! mkdir $LOG_PATH; then
insertlogger "Fail to make log folder"
return 1
fi
fi
if [ ! -f "$LOG_PATH/$LOG_FILENAME" ]; then
if ! touch "$LOG_PATH/$LOG_FILENAME"; then
insertlogger "Fail to create logfile"
return 1
fi
fi
if [ ! -w "$LOG_PATH/$LOG_FILENAME" ]; then
insertlogger "Permission denied to log file"
return 1
fi
messages="["$(date +"%F %H:%M:%S")"] $0".$$" : $1"
echo "$messages" >> "$LOG_PATH/$LOG_FILENAME" || insertlogger $messages
return 0
}
insertlog "Start to extract dumpfile"
# Check parameter 1
# If parameter 1 is empty, check BACKUP_PATH and recent dump file will be extracted
if [ -z "$1" ]; then
if ! ls -t "$BACKUP_PATH/"*".dump.sql"; then
insertlog "Fail to find dumpfile in $BACKUP_PATH"
exit 1
fi
filenamelist=$(ls -t "$BACKUP_PATH/"*".dump.sql")
for i in ${filenamelist[@]}; do
BACKUP_TOTALPATH=$i
break
done
fi
insertlog "$BACKUP_TOTALPATH"
# Check form of dump file is valid and extract the day when the dumpfile is created
rx="/[0-9]{4}_[0-9]{2}_([0-9]{2})\w*\.dump\.sql"
day=
if [[ $BACKUP_TOTALPATH =~ $rx ]]; then
day=${BASH_REMATCH[1]}
fi
if [ -z "$day" ]; then
insertlog "Check dumpfile name YYYY_MM_DD.dump.sql or YYYY_MM_DD_N.dump.sql"
insertlog "Fail to dump file"
exit 1
fi
databasename=
previousname=
# Determine where to import the dumpfile
for i in ${DATABASE_GROUPONE[@]}; do
if [ $i -eq $day ]; then
databasename=$DATABASE_ONENAME
previousname=$DATABASE_TWONAME
fi
done
for i in ${DATABASE_GROUPTWO[@]}; do
if [ $i -eq $day ]; then
databasename=$DATABASE_TWONAME
previousname=$DATABASE_THREENAME
fi
done
for i in ${DATABASE_GROUPTHREE[@]}; do
if [ $i -eq $day ]; then
databasename=$DATABASE_THREENAME
previousname=$DATABASE_ONENAME
fi
done
# If today is not dump day, extracting dump is canceled
if [ -z "$databasename" ]; then
insertlog "Today is not dump day"
insertlog "Extracting dump is canceled"
exit 1
fi
#echo "databasename = $databasename"
#echo "previousname = $previousname"
# Remove all tables in the oldest backup DB
insertlog "Start to delete $previousname tables"
showtables=$(mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" $previousname -e "show tables")
rxtable="(\w+)"
tablelist=( )
count=0
if [ ! -z "$showtables" ]; then
for i in ${showtables[@]}; do
if [[ $i =~ $rxtable ]]; then
tablelist[$((count))]=${BASH_REMATCH[1]}
count=$((count+1))
fi
done
fi
for((i=1;i<count;i++)); do
# echo ${tablelist[$((i))]}
if ! mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" $previousname -e "drop table ${tablelist[$((i))]}"; then
insertlog "Removing $previousname ${tablelist[$((count))]} is failed"
else
insertlog "Success to remove $previousname ${tablelist[$((i))]}"
fi
done
# Start to import dump
insertlog "Start to extract dump - $BACKUP_TOTALPATH to $databasename"
if ! mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" $databasename < "$BACKUP_TOTALPATH"; then
insertlog "Fail to extract dump - $BACKUP_TOTALPATH"
exit 1
fi
insertlog "Success to extract dump - $BACKUP_TOTALPATH"
insertlog "Success to extract dumpfile"
exit