#!/bin/sh
# Input: backup_db n (e.g. backup_db 31)
# Check that the input is valid.
# There should be exactly 1 argument.
if [ $# -ne 1 ]; then
echo Error: $0 invalid usage.
echo Usage: $0 n
exit 1
fi
# The argument should be an integer.
n=`expr $1 + 0 2> /dev/null`
if [ $? -ne 0 ]; then
qnbad=0
elif [ $n -lt 0 ]; then
qnbad=0
else
qnbad=1
fi
if [ $qnbad -eq 0 ]; then
echo Error: n must be a positive integer.
echo Usage: $0 n
exit 1
fi
# Set the current month day and year.
month=`date +%m`
day=`date +%d`
year=`date +%Y`
ymonth=`date +%m`
yday=`date +%d`
yyear=`date +%Y`
hour=`date +%H`
min=`date +%M`
# Add 0 to month. This is a
# trick to make month an unpadded integer.
month=`expr $month + 0`
ymonth=`expr $ymonth + 0`
# Subtrace n from the current day.
yday=`expr $yday - 0`
day=`expr $day - $n`
# While the day is less than or equal to
# 0, deincrement the month.
while [ $day -le 0 ]
do
month=`expr $month - 1`
# If month is 0 then it is Dec of last year.
if [ $month -eq 0 ]; then
year=`expr $year - 1`
month=12
fi
# Add the number of days appropriate to the
# month.
case $month in
1|3|5|7|8|10|12) day=`expr $day + 31`;;
4|6|9|11) day=`expr $day + 30`;;
2)
if [ `expr $year % 4` -eq 0 ]; then
if [ `expr $year % 400` -eq 0 ]; then
day=`expr $day + 29`
elif [ `expr $year % 100` -eq 0 ]; then
day=`expr $day + 28`
else
day=`expr $day + 29`
fi
else
day=`expr $day + 28`
fi
;;
esac
done
# While the day is less than or equal to
# 0, deincrement the month.
while [ $yday -le 0 ]
do
ymonth=`expr $ymonth`
# If ymonth is 0 then it is Dec of last year.
if [ $ymonth -eq 0 ]; then
yyear=`expr $yyear`
ymonth=12
fi
# Add the number of days appropriate to the
# month.
case $ymonth in
1|3|5|7|8|10|12) yday=`expr $yday + 31`;;
4|6|9|11) yday=`expr $yday + 30`;;
2)
if [ `expr $yyear % 4` -eq 0 ]; then
if [ `expr $yyear % 400` -eq 0 ]; then
yday=`expr $yday + 29`
elif [ `expr $yyear % 100` -eq 0 ]; then
yday=`expr $yday + 28`
else
yday=`expr $yday + 29`
fi
else
yday=`expr $yday + 28`
fi
;;
esac
done
if [ $day -le 9 ] ; then
day="0"$day
fi
if [ $month -le 9 ] ; then
month="0"$month
fi
if [ $yday -le 9 ] ; then
yday="0"$yday
fi
if [ $ymonth -le 9 ] ; then
ymonth="0"$ymonth
fi
# Create a directory for today CCYYMMDD
mkdir /[URL unfurl="true"]www/db/$yyear$ymonth$yday[/URL]
# Backup databases
mysqlhotcopy --user=username --password=password database1 /[URL unfurl="true"]www/db/temp[/URL]
tar -cf /[URL unfurl="true"]www/db/$yyear$ymonth$yday/db1$hour$min.tar[/URL] /[URL unfurl="true"]www/db/temp[/URL]
gzip /[URL unfurl="true"]www/db/$yyear$ymonth$yday/db1$hour$min.tar[/URL]
rm -Rf /[URL unfurl="true"]www/db/temp/*[/URL]
mysqlhotcopy --user=username --password=password database2 /[URL unfurl="true"]www/db/temp[/URL]
tar -cf /[URL unfurl="true"]www/db/$yyear$ymonth$yday/db2$hour$min.tar[/URL] /[URL unfurl="true"]www/db/temp[/URL]
gzip /[URL unfurl="true"]www/db/$yyear$ymonth$yday/db2$hour$min.tar[/URL]
rm -Rf /[URL unfurl="true"]www/db/temp/*[/URL]
# Clean up directory from n days ago
rm -Rf /[URL unfurl="true"]www/db/$year$month$day/*.tar[/URL]
rm -Rf /[URL unfurl="true"]www/db/$year$month$day/*.tar.gz[/URL]
rmdir /[URL unfurl="true"]www/db/$year$month$day[/URL]
exit 0