Skip to content

Instantly share code, notes, and snippets.

@evansims
Created June 1, 2011 20:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evansims/1003248 to your computer and use it in GitHub Desktop.
Save evansims/1003248 to your computer and use it in GitHub Desktop.
Nightly Backup Script
#!/bin/bash
mysqlUser="MYSQL USER"
mysqlPass="MYSQL PASSWORD"
backup="/path/to/backups/"
folders[0]="/home/user1/"
folders[1]="/home/user2/"
folders[2]="/var/lib/mongodb/"
temp="$PWD/backup.tmp"
echo "Starting Backup..."
stamp=$(date -u +%F)
backup=$backup$stamp
if [ ! -d "$backup" ]; then
mkdir "$backup"
fi
echo "-----"
echo -ne "Preparing to backup MySQL tables... "
databases=( $(mysql -u"$mysqlUser" -p"$mysqlPass" --skip-column-names --batch -e "show databases;" 2>"$temp") );
echo "found ${#databases[@]} databases.";
for i in ${databases[@]}; do
if [ $i != "information_schema" ] && [ $i != "mysql" ] && [ $i != "phpmyadmin" ]; then
echo -ne "Optimizing and backing up database $i ... "
mysql -u"$mysqlUser" -p"$mysqlPass" -D "$i" --skip-column-names --batch -e "optimize table $i" 2>"$temp" >/dev/null
mysqldump -u"$mysqlUser" -p"$mysqlPass" --opt $i | bzip2 -c > "$backup/db_$i.sql.bz2"
echo "Done."
fi
done
echo "-----"
for f in "${folders[@]}"
do
if [ -d "$f" ]; then
echo -ne "Backing up directory $f ... "
d=$(basename $f)
d="$d.tar.bz2"
elif [ -f "$f" ]; then
echo -ne "Backing up file $f ... "
d=${f##*/}
d="$d.tar.bz2"
else
echo "Error! $f could not be found."
exit 1
fi
tar -cjf "$backup/$d" -C / ${f:1}
echo "Done."
done
if [ ! -s $temp ]; then
rm -f "$temp"
fi
echo "-----"
echo "Pushing data to SpiderOak..."
SpiderOak --batchmode
echo "-----"
echo "Backup Complete!"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment