mysql备份与恢复方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
服务器备份方案
一、MYSQL数据库备份与恢复:
数据库本地备份:当数据量少的时候可以在每天凌晨1点-3点进行完全备份,随着数据库的增大,可以2两小时(按照需求设置时间)做增量备份与完全备份相结合的备份方式以确保数据的安全。
数据库完全备份脚本:
1.确定我们备份文件存放的目录这里我把所有备份文件放到/home/mysqlback
2.确定需要备份的数据库,这里我们用备份d_test这个数据库来说明。
dbuser="root" #定义数据库用户名
dbpasswd="123456" #定义数据库密码
dbname="d_test" #定义需要备份的数据库
date1=`date +%Y%m%d` #读取当前日期
date2 = `date +%Y%m%d%H%M%S` #读取当前的日期时间Y年m月d日H小时M分钟S秒
date3 = `date -d -5day +"%Y%m%d"` #读取当天日期之5天前的日期
back = /home/mysqlback/$date1 #备份文件存放目录
#判断是不是有文件存放目录如果没有则新建。
if [ ! -d $back ]
then
mkdir -p $back
fi
#使用mysqldump命令来备份指定的数据库并且压缩成gz包。
mysqldump -u$dbuser -p$dbpasswd $dbname | gzip > $back/$dbname$date2.sql.gz
#删除指定5天前备份的过期文件以便节省磁盘空间
cd /home/mysqlback
rm -rf $date3
异地备份
首先准备一台异地的服务器,并且搭建好vsftp(vsftp具体搭建详细步骤请参考VSFTP搭建文档)
异地备份到vsftp服务器上脚本如下:
数据库恢复或者重建,因为是完全备份,可以直接恢复最后一次完全备份文件。
gunzip <备份.sql.gz | mysql -u root -p d_test
二.文件备份与恢复:
因为文件一般都比较大,所以我们采用完整与增量结合的方式做备份,每个星期(时间具体情况而定)
#!/bin/sh #shell脚本
wenjian="/home/backwenjian" #指定需要备份的文件目录
backlog="/home/backlog" #指定备份时候记录文件
date1=`date +%Y%m%d` #读取当前日期
date2=`date +%Y%m%d%H%M%S` #读取当前日期时间
date3=`date -d -14day +"%Y%m%d"` #读取14天前的日期
back="/home/beifen/$date1" #指定备份存放的文件目录
#判断是不是有文件存放目录如果没有则新建
if [ ! -d $back ]
then
mkdir -p $back
fi
#用tar备份指定文件并打包
tar -g $backlog -zcf $back/$date2.tar.gz $wenjian #命令在第一次使用的时候是完整备份,之后使用则是增量备份
#进入备份存放目录删除指定时间目录
cd /home/beifen
rm -rf $date3
如果需要一周备份一次完整备份,我们只需要把记录文件删除或者备份到其他目录或者改名就好下面是
文件恢复:
使用tar解包命令进行解包,恢复顺序为,最后一次完整备份+最后一次完整备份后的一次增量备份+……+最后一次增量备份。
脚本运行时间也是备份策略时间:
一种系统默认自动执行的目录有一下几个,如果备份策略规律符合下面的策略时间的话,可以把编写的shell脚本放入对应的目录即可,系统会自动运行对应文件,提示:所以的shell脚本要给予执行权限,否则无法执行。
/etc/cron.daily/ 每天执行一次
/etc/cron.monthly/ 每月执行一次
/etc/cron.weekly/ 每周执行一次
/etc/cron.hourly/ 每小时执行一次
另外我们可以自己定义时间策略规律:
可以直接用命令:crontab –e 来编辑,这个命令编辑的文件是/var/spool/cron/下面对应的用户cron文件,如果你用的是root用户编辑的,那么你编辑的就是/var/spool/cron/root 文件。也可以直接修改/etc/crontab文件。
编辑文件格式如下:
Minute Hour Day Month Dayofweek Command
分钟小时天月每星期那天命令
字段的代表的意思:
Minute 代表每个小时第几分钟执行指定任务
Hour 代表每天的第几个小时执行指定任务
Day 代表每月的第几天执行指定的任务
Month 代表每年的第几个月执行指定任务
Dayofweek 代表每周的第几天执行指定任务
Command 代表指定要执行的程序
这些字段除了Command是每次必须指定的以外其他的可以可选,不指定的可以用*代替
下面举例说明:
Minute Hour Day Month Dayofweek Command
分钟小时天月每星期那天命令
10 * * * * sh /home/sh/mysql_back.sh 指定每小时的第10分钟执行一次sh 命令/home/sh/mysql_back.sh 是指定的脚本路径
10 13 * * * sh /home/sh/mysql_back.sh 指定每天13点第10分钟执行一次sh 命令/home/sh/mysql_back.sh 是指定的脚本路径
10 13 22 * * sh /home/sh/mysql_back.sh 指定每月22号13点第10分钟执行一次sh命令/home/sh/mysql_back.sh 是指定的脚本路径
10 13 22 5 * sh /home/sh/mysql_back.sh 指定每年的5月22号13点第10分钟执行一次sh命令/home/sh/mysql_back.sh 是指定的脚本路径
10 13 * * 2 sh /home/sh/mysql_back.sh 指定每星期二13点第10分钟执行一次sh命令/home/sh/mysql_back.sh 是指定的脚本路径(星期的数字代表分别为:0星期天1星期一2星期二……6星期六)
*/10 * * * * sh /home/sh/mysql_back.sh 指定每10分钟(每小时第10 20 30 40 50 60)执行一次sh命令/home/sh/mysql_back.sh 是指定的脚本路径
10 13-18 * * * sh /home/sh/mysql_back.sh 指定每天13点到18点的第10分钟执行一次sh命令/home/sh/mysql_back.sh 是指定的脚本路径
10 13 22,26 * * sh /home/sh/mysql_back.sh 指定每月22号以及26号的13点第10分钟执行一次sh命令/home/sh/mysql_back.sh 是指定的脚本路径
10 13 */22 * * sh /home/sh/mysql_back.sh 指定每隔22天13点10分钟执行一次sh命令/home/sh/mysql_back.sh 是指定的脚本路径
10 13 * * * root run-parts /home/sh/ 指定每天13点第10分钟执行/home/sh/下面的所有可以执行的文件。
我们通过上面的举例可以灵活设置出实际需求策略。