#!/usr/local/bin/bash
# This is a simple MySQL backup script, databases will be extracted for direct injection
# into mysql for a restore. All dumps will be bzip2 compressed to save space.
# License:	LGPL (http://www.fsf.org/licenses/lgpl.html)
# Purpose:	backup database(s) to file(s)
# Author:	Alexander Kuehn (nagilum@nagilum.org)
# Hompage:	http://www.nagilum.org/#p
# 
#  settings: 
# Where to work in?

cd /backup/databases

# database definition: host:database:user:password
# use "*" (without the quotes) as database name for all databases
databases="localhost:*:root:mypassword \
	dbserver:mydatabase:myuser:mypassword" 

mysqldump=/usr/local/bin/mysqldump
mysql=/usr/local/bin/mysql
dump_opts="-e --add-drop-table --quote-names"
comp_flt="/usr/bin/bzip2 -9"
extension=".bz2"
umask 077
for database in ${databases}; do
	host=`echo ${database}|cut -d: -f1`
	dbase=`echo ${database}|cut -d: -f2`
	user=`echo ${database}|cut -d: -f3`
	pass=`echo ${database}|cut -d: -f4`
	if [ "${dbase}" = '*' ] 
	then	dbs=`echo "show databases;"|${mysql} -h ${host} -u ${user} -p${pass}|sed -e 1d`
		mkdir -p "${host}"
		chmod 700 "${host}"
		for db in ${dbs}
		do	backupdir=${host}/${db}"_db"
			mkdir -p "${backupdir}"
			chmod 700 "${backupdir}"
			backupfile=${backupdir}/${db}"_"`date +"%d"`.bz2
			${mysqldump} -h ${host} -u ${user} ${dump_opts} -p${pass} ${db}| ${comp_flt} >"${backupfile}"
			chmod 600 ${backupfile}
		done
	else
		backupdir=${dbase}"_db"
		backupfile=${backupdir}/${dbase}"_"`date +"%d"`.bz2
		mkdir -p "${backupdir}"
		chmod 700 "${backupdir}"
		${mysqldump} -h ${host} -u ${user} ${dump_opts} -p${pass} ${dbase}| ${comp_flt} >"${backupfile}"
		chmod 600 ${backupfile}
	fi
done


