168 lines
4.2 KiB
Bash
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
|
|
|