环亚娱乐ag88官方网站|优惠社区

?找回密码
?ag客服电话|平台

QQ登录

只需一步,快速开始

查看: 1763|回复: 1
打印 上一主题 下一主题
收起左侧

[备份恢复] LinuxVPS自动每日备份并上传FTP空间

[复制链接]

最近用的是Buyvm的VPS,性价比很给力,可是因为他家是ONEMAN运营,怕跑路。钱的损失不重要,才几美元。可数据呢?如果丢了,就灰常有趣了。

 此文介绍一种,每天自动备份网站以及数据库文件,发送EMAIL到邮箱,并上传网站和数据加文件到FTP空间,自动删除旧备份的方法。

首先安装EMAIL发送组件:

yum install sendmail mutt

脚本下载地址:http://www.vpsmm.com/soft/AutoBackupToFtp.sh

脚本代码如下(注意修改FTP服务器地址用户名密码):

  1. #!/bin/bash
  2. #你要修改的地方从这里开始
  3. MYSQL_USER=root? ?? ?? ?? ?? ?? ?? ?? ?? ???#mysql用户名
  4. MYSQL_PASS=123456? ?? ?? ?? ?? ?? ?? ? #mysql密码
  5. MAIL_TO=cat@hostloc.com? ?? ?? ?? ?? ???#数据库发送到的邮箱
  6. FTP_USER=cat? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?#ftp用户名
  7. FTP_PASS=123456? ?? ?? ?? ?? ?? ?? ?? ? #ftp密码
  8. FTP_IP=imcat.in? ?? ?? ?? ?? ?? ?? ?? ???#ftp地址
  9. FTP_backup=backup? ?? ?? ?? ?? ?? ?? ?? ???#ftp上存放备份文件的目录,这个要自己得ftp上面建的
  10. WEB_DATA=/home/www? ?? ?? ?? ?? ?? ?? ?? ???#要备份的网站数据
  11. #你要修改的地方从这里结束

  12. #定义数据库的名字和旧数据库的名字
  13. DataBakName=Data_$(date +"%Y%m%d").tar.gz
  14. WebBakName=Web_$(date +%Y%m%d).tar.gz
  15. OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
  16. OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz
  17. #删除本地3天前的数据
  18. rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz
  19. cd /home/backup
  20. #导出数据库,一个数据库一个压缩文件
  21. for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
  22. ? ? (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz)
  23. done
  24. #压缩数据库文件为一个文件
  25. tar zcf /home/backup/$DataBakName /home/backup/*.sql.gz
  26. rm -rf /home/backup/*.sql.gz
  27. #发送数据库到Email,如果数据库压缩后太大,请注释这行
  28. echo "主题:数据库备份" | mutt -a /home/backup/$DataBakName -s "内容:数据库备份" $MAIL_TO
  29. #压缩网站数据
  30. tar zcf /home/backup/$WebBakName $WEB_DATA
  31. #上传到FTP空间,删除FTP空间5天前的数据
  32. ftp -v -n $FTP_IP << END
  33. user $FTP_USER $FTP_PASS
  34. type binary
  35. cd $FTP_backup
  36. delete $OldData
  37. delete $OldWeb
  38. put $DataBakName
  39. put $WebBakName
  40. bye
  41. END
复制代码
给脚本添加执行权限:

  1. chmod +x /root/AutoBackupToFtp.sh
复制代码
利用系统crontab实现每天自动运行:

crontab -e

输入以下内容:

00 00 * * * /root/AutoBackupToFtp.sh

其中00 00为时间分/小时,可自行修改,例如:30 12 ***,就是每天12.30运行这个脚本。

附一个使用lftp备份文件

  1. #!/bin/bash
  2. #定义数据库的名字和旧数据库的名字
  3. DataBakName=Data_$(date +"%Y%m%d").tar.gz
  4. WebBakName=Web_$(date +%Y%m%d).tar.gz
  5. #删除本地3天前的数据
  6. rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz
  7. #导出mysql数据库
  8. /usr/local/mysql/bin/mysqldump -uroot -ppassword --databases db1 > /home/backup/databackup.sql
  9. #压缩数据库
  10. tar zcf /home/backup/$DataBakName /home/backup/databackup.sql
  11. rm -rf /home/backup/databackup.sql
  12. #压缩网站数据
  13. tar zcvf /home/backup/$WebBakName /home/wwwroot
  14. #使用lftp同步备份目录
  15. lftp -u user,password -e "mirror -R --only-newer /home/backup /backup" ftp.yoursite.cn
  16. exit
  17. END
复制代码
转载自:http://www.vpsmm.com/blog/everyday-auto-backup-linux-vps
沙发
?楼主| 环亚娱乐ag88官方网站|优惠 发表于 2012-8-4 01:01 | 只看该作者

小东写这么个脚本的目的是为了备份VPS里的资料到远程FTP,然后在VPS里设置定时任务就很简单的完成了。

利用的是lftp,

1、安装lftp

yum install lftp
如果要使用下面的发送邮件功能,则需要安装mutt的email发送组件

yum install sendmail mutt
2、设置备份文件夹,在/home下新建的一个backup的文件夹,下面的脚步都是基于/home/backup这个备份文件夹的;然后远程FTP的根目录里也新建一个backup文件夹。

3、建立备份脚本backup.sh(权限777)放于/home下,建议使用Winscp软件进行sftp操作,用Putty进行SSH操作。


  1. #!/bin/bash
  2. #这里需要您修改下
  3. #MAIL_TO=XXOO@qq.com #数据库发送到的邮箱,如需使用请先安装mutt并去掉注释
  4. WEB_DATA=/home/wwwroot #要备份的网站数据
  5. mysql_DATA=/usr/local/mysql/var #要备份的数据库目录
  6. #yuming_DATA=/usr/local/nginx/conf #要备份的域名信息
  7. #下面一般可以默认

  8. #定义数据库的名字和旧数据库的名字
  9. DataBakName=Data_$(date +”%Y%m%d”).tar.gz
  10. WebBakName=Web_$(date +%Y%m%d).tar.gz
  11. #yumingName=yuming_$(date +%Y%m%d).tar.gz
  12. OldData=Data_$(date -d -5day +”%Y%m%d”).tar.gz
  13. OldWeb=Web_$(date -d -5day +”%Y%m%d”).tar.gz
  14. #Oldyuming=yuming_$(date -d -5day +”%Y%m%d”).tar.gz
  15. #以上的-5day即最下面的删除ftp空间中5天前的数据,可自定义。

  16. #删除本地3天前的数据
  17. rm -rf /home/backup/Data_$(date -d -3day +”%Y%m%d”).tar.gz /home/backup/Web_$(date -d -3day +”%Y%m%d”).tar.gz /home/backup/yuming_$(date -d -3day +”%Y%m%d”).tar.gz
  18. #你可以修改3为其他数字,即自定义删除几天前的数据

  19. cd /home/backup

  20. #停止mysql,是为了防止数据读取过程中备份出错
  21. service mysql stop

  22. #打包mysql目录
  23. cd $mysql_DATA
  24. tar zcf /home/backup/$DataBakName ./*

  25. #运行mysql
  26. service mysql start

  27. #压缩网站数据
  28. cd $WEB_DATA
  29. tar zcf /home/backup/$WebBakName ./*

  30. #压缩域名信息,建议LNMP整个VPS迁移的话备份下这些子域名配置文件
  31. #cd $yuming_DATA
  32. #tar zcf /home/backup/$yumingName ./*

  33. #如果需要将数据库备份到邮箱,请去掉前面注释,如果数据库过大,不建议使用此功能
  34. #echo “主题:数据库备份” | mutt -a /home/backup/$DataBakName -s “内容:数据库备份” $MAIL_TO

  35. #上传到FTP空间,删除FTP空间5天前的数据
  36. lftp -u ftpuser,ftppassword -e “mirror -R –only-newer /home/backup /backup” ftpaddress
  37. exit
  38. END
复制代码
需要对上面的脚本进行一点解释:

XXOO@qq.com? ?这个可以替换成自己的,如果不用把数据库发到邮箱可忽视。

ftpuser FTP的用户名

ftppassword FTP的密码

ftpaddress FTP的地址

4、设置linux的crontab定时任务自动执行备份上传

crontab -e
会出来个vi编辑框,按i就可以编辑添加一条。

00 00 * * * /home/backup.sh
然后按Esc和:wq保存退出即可,上面的意思即每天0点0分自动执行/home/backup.sh这个文件。
更多关于时间写法标准请自行百度/谷歌,,这里不多说。
如果/home/backup.sh执行不了,或者写完了crontab无法保存,那就在/home/backup.sh前面加个/bin/bash ,即执行的时候

/bin/bash /home/backup.sh
写定时任务的时候

0 2 * * * /bin/bash /home/backup.sh
上面的意思是每天2点备份。
这样就搞定了自动备份的脚本了,数据更安全一些,吼吼!

转自http://www.suoyine.com/archives/2122.html

关于我们|小黑屋|手机版|Archiver|环亚娱乐ag88官方网站|优惠技术社区 ( 湘ICP备11020288号-1 )

GMT+8, 2019-11-10 18:39 , Processed in 0.018382 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

? 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表