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

  • 内容
  • 评论
  • 相关

相信很多企业在架构web应用的时候都会做一件事情,那就是备份文件。那么今天我们要讲的也是备份数据库,我们打包备份之后会将这个包远程发送到另外一个存储设备,一般来说就是一台服务器,不过仅仅是为了存储。

首先大体说一下备份的实现过程:

鉴于数据库文件的重要性,我要每天来备份数据,当然我可以手动这样做,但是我不想为这些琐事浪费掉宝贵时间,okay,我们首先要建立一个定时任务,例如我每天在北京时间十一点启动备份程式,那么在linux系统下我就需要建立一个定时任务。在linux下面,我们添加定时任务需要编辑这个文件:

vim /etc/crontab

打开这个文件之后,我们写入这样一行:

01 11 * * * root /usr/bin/backup.sh 表示每天11:01分进行备份

当然,这个定时任务需要这项服务预先启动,启动此服务饿方法为:

/sbin/service crond start 启动定时服务

接下来,我们给出备份数据库的脚本

#远程备份的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脚本有个地方要稍微注意一下,就是

date=$(date +%Y%m%d)

这一句中的变量是为了将当天的日期如20120101赋给$data,但是要注意date与+%Y%m%d需要有个空格哦。不然可能会出错。

评论

0条评论

发表评论

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