相信很多企业在架构web应用的时候都会做一件事情,那就是备份文件。那么今天我们要讲的也是备份数据库,我们打包备份之后会将这个包远程发送到另外一个存储设备,一般来说就是一台服务器,不过仅仅是为了存储。
首先大体说一下备份的实现过程:
鉴于数据库文件的重要性,我要每天来备份数据,当然我可以手动这样做,但是我不想为这些琐事浪费掉宝贵时间,okay,我们首先要建立一个定时任务,例如我每天在北京时间十一点启动备份程式,那么在linux系统下我就需要建立一个定时任务。在linux下面,我们添加定时任务需要编辑这个文件:
[shell]vim /etc/crontab[/shell]
打开这个文件之后,我们写入这样一行:
[shell]01 11 * * * root /usr/bin/backup.sh 表示每天11:01分进行备份[/shell]
当然,这个定时任务需要这项服务预先启动,启动此服务饿方法为:
[shell]/sbin/service crond start 启动定时服务[/shell]
接下来,我们给出备份数据库的脚本
[shell]
#远程备份的FTP用户名
ftp_user="username"
#远程备份的FTP密码
ftp_pass="password"
#本地备份目录
back_path=/home/backup/
#远程备份目录
remote_path=/tmp/remote/
#备份文件名字,以日期命名,方便查阅
back_name=$(date +%Y%m%d)
#改变本地目录
cd ${back_path}
date=$(date +%Y%m%d)
#备份mysql数据库
mysqldump -uroot -ppassword -h123.456.789.00 database > /tmp/$date.sql
#打包sql文件
tar -zc -f ${back_name}.tar.gz /tmp/${back_name}.sql
#删除打包过的sql文件
rm -rf /tmp/$date.sql
#远程连接FTP
ftp -v -n 123.456.789.00 << END
#非匿名登录使用用户名和密码
user ${ftp_user} ${ftp_pass}
#设置为二进制形式传输
binary
#每次传输完数据缓冲区中的数据后就显示一个#号
hash
#关闭切换提示
prompt off
#改变远程服务器目录
cd /
#改变本地目录
lcd /home/backup
prompt
#开始传输
put ${back_name}.tar.gz
#删除远程服务器上大于七天的备份文件
mdelete $(date -d -7day +%Y%m%d).tar.gz
#结束与远程主机的连接
close
bye
#这是个结束符,与前面<< END开始符呼应,告诉计算机我已经结束了FTP操作
END
#删除本地的打包文件
rm -rf ${back_name}.tar.gz
[/shell]
这里的shell脚本有个地方要稍微注意一下,就是 [shell]date=$(date +%Y%m%d)[/shell] 这一句中的变量是为了将当天的日期如20120101赋给$data,但是要注意date与+%Y%m%d需要有个空格哦。不然可能会出错。