备份mysql并FTP传输到远程服务器的shell脚本

相信很多企业在架构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需要有个空格哦。不然可能会出错。

Avatar photo

About Blackford

这是个最好的时代,这是个最坏的时代,这是个充满希望的春天,这是个令人绝望的冬天,我们前面什么都有,我们前面什么都没有。梦想,让我们一次次的走远,又一次次的回头,一个关于人生的梦想还在不断奔跑,带着喜悦和疼痛,不过一切才刚刚开始,并且直到今天也远远没有结束
This entry was posted in 胡言乱语 and tagged , , , . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注