linux下mysql自动备份脚本
服务器上的数据库每周进行备份一次,备份过程不备份mysql自带的数据库,并且只保留最近的5次备份,具体脚本如下,如有问题,欢迎留言指正。
#!/bin/bash
# mysqldump.sh auto-backup-for-a-week
# author:IceCry admin@zhinizhiwo.com
db_user="root"
db_passwd="test"
db_host="localhost"
backup_dir="/data/www/bak/mysql"
backup_time=`date +%F`
mysql="/data/mysql/bin/mysql"
mysqldump="/data/mysql/bin/mysqldump"
mkir="/bin/mkdir"
rm="/bin/rm"
mv="/bin/mv"
gzip="/bin/gzip"
test ! -d "$backup_dir/backup.0/" && `/bin/mkdir -p $backup_dir/backup.0/`
test ! -f "$backup_dir/backup.log" && /bin/touch "$backup_dir/backup.log"
test ! -w $backup_dir && echo "Error:$backup_dir is un_writeable.">>$backup_dir/backup.log && exit 0
all_dbs="$($mysql -u$db_user -h$db_host -p$db_passwd -Bse 'show databases')"
for db in $all_dbs
do
if [ $db != information_schema ] && [ $db != performance_schema ] && [ $db != mysql ] && [ $db != test ]
then
$mysqldump -u$db_user -h$db_host -p$db_passwd $db | $gzip -9 > "$backup_dir/backup.0/$backup_time.$db.gz"
fi
done
test -d "$backup_dir/backup.5/" && $rm -rf "$backup_dir/backup.5"
for int in 4 3 2 1 0
do
if(test -d "$backup_dir"/backup."$int")
then
next_int=$(($int+1))
$mv "$backup_dir"/backup."$int" "$backup_dir"/backup."$next_int"
fi
done
exit 0
crontab -e写入计划任务
每五分钟执行 /5 *
每小时执行 0
每天执行 0 0 *
每周执行 0 0 0
每月执行 0 0 1
每年执行 0 0 1 1 *