数据库备份策略说明
数据库备份策略说明
1、备份目的
保障项目数据安全,防止服务器故障导致数据无法恢复的情况。
2、备份策略
综述:所有mysql实例已经实现了master、slave结构,我们备份一般在slave服务器进行。部分备份完成之后,会上传一份数据到存储机或者其他服务器进行异机及异地备份,另外备份保存一份。
一、备份方式
1、本机备份
该备份模式,适合于快速恢复数据。比如:误操作删除数据等
2、异机容灾备份
该备份模式,能比较好的规避单机故障问题。
3、异地容灾备份
该备份模式,规避大规模IDC故障(比如:火灾、地震、空调故障等)、数据安全问题
二、备份频率
1、主站www、bbs、blog等核心项目,进行每天完整备份。结合各项目数据库实例master与slave结构,以及当前slave服务器负载和带宽情况,采用crontab 定时备份。
2、对于跟商业有关的项目,备份策略同核心项目。
3、非核心项目90%备份策略采用核心项目备份机制,其他采用每周备份策略。
4、对于近期大规模更新数据或者数据库结构变更的数据库实例,采用人员干预备份模式,即走备份申请流程。
三、备份准备
1、创建备份目录
/opt/phpdba/backup/database
2、脚本编写
详见第四项,备份脚本
3、加入计划任务 crontab
4、检查备份情况
5、添加每天检查列表
四、备份脚本
#!/bin/sh
LogFile=db$(date +%y%m%d).log
week=`date +%w`
cd /opt/phpdba/backup/database
for DBName in database
do
NewFile=db$DBName$(date +%y%m%d).tar.gz
OldLogFile=db$(date -d '7 days ago' +%y%m%d).log
if [ -f $OldLogFile ]
then
rm -f $OldLogFile >> $LogFile 2>&1
echo "[$OldLogFile]Delete Old log File Success!" >> $LogFile
else
echo "[$OldLogFile]No Old log File!" >> $LogFile
fi
case $week in
1)
date=`date -d '56 days ago' +%y%m%d`
OldFile=db$DBName$date.tar.gz
if [ -f $OldFile ]
then
rm -f $OldFile >> $LogFile 2>&1
echo "[$OldFile]Delete Old File Success!" >> $LogFile
else
echo "[$OldFile]No Old Backup File!" >> $LogFile
fi
;;
2|3|4|5|6|0)
date=`date -d '7 days ago' +%y%m%d`
OldFile=db$DBName$date.tar.gz
if [ -f $OldFile ]
then
rm -f $OldFile >> $LogFile 2>&1
echo "[$OldFile]Delete Old File Success!" >> $LogFile
else
echo "[$OldFile]No Old Backup File!" >> $LogFile
fi
;;
esac
if [ -f $NewFile ]
then
echo "[$NewFile]The Backup File is exists,Can't Backup!" >> $LogFile
else
datestart=$(date +%s)
if [ -z $DBPasswd ]
then
mysqldump -u $DBUser --opt $DBName |gzip > $NewFile
else
echo "start backup" >> $LogFile
cd /opt/phpdba/data/database
#sh stop3310.sh
/opt/phpdba/mysql/bin/mysql -S /tmp/mysql.sock -p'123456' -e "stop slave;flush tables"
tar zcf /opt/ phpdba /backup/database/$NewFile var
#sh start3310.sh