Skip to content

Instantly share code, notes, and snippets.

@urbels
Created October 18, 2013 11:51
Show Gist options
  • Save urbels/7040476 to your computer and use it in GitHub Desktop.
Save urbels/7040476 to your computer and use it in GitHub Desktop.
mysql dump + free space check + remove oldest to free up space
#!/bin/sh
user=user
ftpuser=$user
pass=password
db=dbname
host=remote/local
BkUp_dir="/home/$ftpuser/dbdump/"
########################################
dater=`date +%y%m%d`
sp_dl=0
dl_flag=0
echo "$(date "+%Y/%m/%d %R:%S") Starting Mysql backup session for user \"$user\" database \"$db\" "
echo "$(date "+%Y/%m/%d %R:%S") Checking if back-up directory \"$BkUp_dir\" exists.."
if [ -d $BkUp_dir ]
then
echo "$(date "+%Y/%m/%d %R:%S") Directory \"$BkUp_dir\" exists!"
else
echo "$(date "+%Y/%m/%d %R:%S") Directory \"$BkUp_dir\" doesn't exist!"
echo "$(date "+%Y/%m/%d %R:%S") Creating directory \"$BkUp_dir\""
mkdir $BkUp_dir
chmod 700 $BkUp_dir
fi
echo "$(date "+%Y/%m/%d %R:%S") Estimating database \"$db\" size.."
exp_db_size=`mysql -h $host -P 6603 -u $user -p$pass -D $db -e "show table status\G"| egrep "(Index|Data)_length" | awk 'BEGIN { rsum = 0 } { rsum += $2 } END {
print rsum }'`
exp_db_size=`expr $exp_db_size / 1024`
echo "$(date "+%Y/%m/%d %R:%S") Expected DB size (below): $exp_db_size kB"
echo "$(date "+%Y/%m/%d %R:%S") Estimating space available for user \"$ftpuser\".."
sp_av=`quota $ftpuser | grep "/dev/" | awk {'print $3-$2'}`
echo "$(date "+%Y/%m/%d %R:%S") Space available: $sp_av kB"
sp_lf=`expr $sp_av - $exp_db_size`
if [ $sp_lf -gt 0 ]
then
echo "$(date "+%Y/%m/%d %R:%S") Executing mysqldump command.."
`mysqldump -h $host -P 6603 -u $user -p$pass $db > $BkUp_dir$dater.sql`
echo "$(date "+%Y/%m/%d %R:%S") Compressing mysqldump file.."
`tar -pczf $BkUp_dir$dater.sql.gz $BkUp_dir$dater.sql 2>/dev/null`
`rm $BkUp_dir$dater.sql`
echo "$(date "+%Y/%m/%d %R:%S") Done! Backup \"$dater.sql.gz\" completed!"
else
echo "$(date "+%Y/%m/%d %R:%S") Theres not enough space available!"
sql_list=`ls $BkUp_dir | grep "\.sql"`
sql_count=`ls $BkUp_dir | grep "\.sql" | wc -l`
if [ $sql_count -gt 0 ]
then
echo "$(date "+%Y/%m/%d %R:%S") There are $sql_count \".sql\" files!"
for i in $sql_list
do
bk_size=`du -s $BkUp_dir$i | awk {'print $1'}`
sp_dl=`expr $sp_dl + $bk_size`
if [ $sp_dl -ge $exp_db_size ]
then
echo "$(date "+%Y/%m/%d %R:%S") $i $bk_size kB (If all DB's till this one are deleted: $sp_dl kB - Space required: $exp_db_size kB)"
dl_flag=1
break
fi
done
if [ $dl_flag -eq 1 ]
then
for j in $sql_list
do
echo "$(date "+%Y/%m/%d %R:%S") Deleting $j"
#echo "rm $BkUp_dir$j"
if [ "$j" = "$i" ]
then
echo "$(date "+%Y/%m/%d %R:%S") Executing mysqldump command.."
`mysqldump -h $host -P 6603 -u $user -p$pass $db > $BkUp_dir$dater.sql`
echo "$(date "+%Y/%m/%d %R:%S") Compressing mysqldump file.."
`tar -pczf $BkUp_dir$dater.sql.gz $BkUp_dir$dater.sql 2>/dev/null`
`rm $BkUp_dir$dater.sql`
echo "$(date "+%Y/%m/%d %R:%S") Done! Backup \"$dater.sql.gz\" completed!"
break
fi
done
else
echo "$(date "+%Y/%m/%d %R:%S") Even deleting all the back-up's won't free up enough space!"
echo "$(date "+%Y/%m/%d %R:%S") Failed to make a Mysql back-up - Need more free space! Space available: $sp_av kB Space needed: $exp_db_size kB"
fi
else
echo "$(date "+%Y/%m/%d %R:%S") There are no backups to delete to free up some space!"
echo "$(date "+%Y/%m/%d %R:%S") Failed to make a Mysql back-up - Need more free space! Space available: $sp_av kB Space needed: $exp_db_size kB"
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment