版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://liguxk.blog.51cto.com/129038/288461
实现功能:定期备份数据库,删除过期备份,通过ftp方式实现异地备份。
                      使用shell脚本配合crontab进行自动化备份。
 
备份环境:
mysql replication架构中的从机上进行备份
 
采用mysqlhotcopy原因:mysqlhotcopy方式,该方式在复制前先进行锁表,保证数据在同一刻一致性,复制完成后自动解锁。
 
在从机上备份的原因:在从机上执行,不影响WEB对主库的写操作。mysql replication 遇到锁表后暂停,当完成后根据relay-log日志继续与主库同步,同步正常
 
#!/bin/bash
#this script for backup datebase
#获取当前日期
TODAY=$('date' +'%Y%m%d')
#设定过期时间为7天
EXPIRED=$('date' -d '-7 days' +'%Y%m%d')
STOREDIR=/home/bak/
MYSQLHOTCOPY=/usr/local/mysql/bin/mysqlhotcopy

#######################    Backup and compress databases ###################################
#需要备份的数据库列表
database=(db1 db2 db3 db4 …… dnn)

echo "Copy Database start time :" > /info.txt
echo $('date' '+%Y-%m-%d %H:%M:%S') >> /info.txt
echo "" >> /info.txt
echo "File size as follows" >> /info.txt

rm -rf /home/bak/*

for i in ${database[*]}
do
$MYSQLHOTCOPY -u=用户名 -p=密码 $i /home/bak/
du -sh /home/bak/$i >> /info.txt
done

echo "" >> /info.txt
echo "" >> /info.txt
echo "Total sizes:" >> /info.txt

#######################     Tar databases         ###############################################
du -sh /home/bak >> /info.txt
cd /home
#对备份文件进行压缩
tar czf bak.tar.gz bak
du -sh /home/bak.tar.gz >> /info.txt
echo "" >> /info.txt
echo "Upload file time :" >>/info.txt
echo $('date' '+%Y-%m-%d %H:%M:%S') >> /info.txt

########################    Upload file to ftp server    ######################################
ftp -v -n ftp服务器IP << END
user ftp用户名 密码
binary
hash
#创建新的日期文件夹
mkdir $TODAY
cd $TODAY
lcd /home
prompt

#删除过期数据及文件夹
mput bak.tar.gz
cd /$EXPIRED
mdelete bak.tar.gz
cd ../
rmdir $EXPIRED
close
bye
END

######################    Send mail Report ##################################################
echo "" >> /info.txt
echo "Complete time is:" >> /info.txt
echo $('date' '+%Y-%m-%d %H:%M:%S') >> /info.txt
mail -s "DataBase backup Report" liguxk@126.com < /info.txt
本文出自 “寒.枫” 博客,请务必保留此出处http://liguxk.blog.51cto.com/129038/288461