public
Last active

Script to backup MySQL

  • Download Gist
backup_mysql.sh
Shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
# Configuration.
date=`date +%Y-%m-%d`
bk_dest='/var/archives/mysql'
log_file=$bk_dest/bk_mysql-${date}.log
mysql_cmd='/usr/bin/mysql'
mysqldump_cmd='/usr/bin/mysqldump'
dbuser=root
dbpass=`cat /etc/.mysqlpasswd`
 
 
databases=(`echo 'show databases;' | $mysql_cmd -u ${dbuser} --password=${dbpass} | grep -v ^Database$`)
 
for d in "${databases[@]}"; do
if [[ $d != 'tmp' && $d != 'test' ]]
then
echo "DATABASE ${d}" >> $log_file
path="${bk_dest}/${date}"
mkdir -p ${path}
${mysqldump_cmd} --user=${dbuser} --password=${dbpass} --opt --databases ${d} | bzip2 -c > ${path}/${d}.sql.bz2
fi
done
 
# delete old dumps (retain 5 days)
find ${bk_dest} -mtime +5 -exec rm {} \;
 
echo "" >> $log_file
echo Disk Space Report: >> $log_file
echo -------------------------------------- >> $log_file
du -h --max-depth=1 $bk_dest >> $log_file

Hello,

this script doesn't work! Since error at line 11:
/etc/cron.daily/backup_mysql.sh: 11: /etc/cron.daily/backup_mysql.sh: Syntax error: "(" unexpected

But if I remove the parentheses gives me this error:
/etc/cron.daily/backup_mysql.sh: 13: /etc/cron.daily/backup_mysql.sh: Bad substitution

I have a vps with ubuntu 12.04.

Ok, it was the fault of the fact that /bin/sh was a link to dash not bash.

For posterity will, resolves itself into this:

after installing bash with:

sudo apt-get install bash

give the commands:

sudo rm /bin/sh
sudo ln-s /bin/bash /bin/sh

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.