#!/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