LinuxVPS自动每日备份文件和数据库上传FTP空间

2010年11月01日 3960 字数 131674 阅读 176 评论 标签:AutoBackup · centos · Debian · Education

文章导读

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

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

首先安装EMAIL发送组件:

yum install sendmail mutt

脚本下载地址:https://cdn.vpsmm.com/soft/AutoBackupToFtp.sh

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

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

#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz
#删除本地3天前的数据
rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz
cd /home/backup
#导出数据库,一个数据库一个压缩文件
for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz)
done
#压缩数据库文件为一个文件
tar zcf /home/backup/$DataBakName /home/backup1 * 应该就可以了

  • 百度影音 百度影音

    这个是linux的吧 win2003 怎么操作?

  • 中国沼气网 中国沼气网

    按照这个脚本我在VPS上装好了,可以每天自动备份,数据库可以发送到我的邮箱,但是网站文件没有发送到我的另一个FTP服务器上面,地址是对的。
    我的要备份的VPS没有装FTP,这样可以吗?

    1. 小夜 小夜

      先手动执行一下,如果有什么错误。会有提示。像FTP密码错误,或目录没有之类。

  • 中国沼气网 中国沼气网

    /root/AutoBackupToFtp.sh: line 33: ftp: command not found
    提示这个。是不是接收备份文件的FTP不存在

    1. 小夜 小夜

      可能是你的VPS上面没有FTP客户端软件。yum install ftp 或 apt-get install ftp

  • 中国沼气网 中国沼气网

    tar: Removing leading `/' from member names
    tar: Removing leading `/' from member names
    Connected to 11.25.17.21 (...).
    220 Microsoft FTP Service
    331 Password required for administrator.
    230 User administrator logged in.
    200 Type set to I.
    250 CWD command successful.小夜我按照说的装了FTP,执行了一次提示这个这个,应该可以了吧
    550 Data_20111011.tar.gz: The system cannot find the file specified.
    550 Web_20111011.tar.gz: The system cannot find the file specified.
    local: Data_20111016.tar.gz remote: Data_20111016.tar.gz
    227 Entering Passive Mode (116,255,173,217,16,24).

    1. 小夜 小夜

      看看FTP备份的文件,是否与网站文件大小相同。再看看数据库文件,这样准确一些。

  • 中国沼气网 中国沼气网

    Connected to 11.25.17.21 ().
    220 Microsoft FTP Service
    331 Password required for administrator.
    230 User administrator logged in.
    200 Type set to I.
    250 CWD command successful.
    550 Data_20111012.tar.gz: The system cannot find the file specified.
    550 Web_20111012.tar.gz: The system cannot find the file specified.
    local: Data_20111017.tar.gz remote: Data_20111017.tar.gz
    227 Entering Passive Mode (116,255,173,217,13,48).
    ftp: connect: Connection timed out
    local: Web_20111017.tar.gz remote: Web_20111017.tar.gz
    421 Timeout (120 seconds): closing control connection.
    Passive mode refused.
    小夜 FTP 好像不行,这个会是什么问题

    1. 小夜 小夜

      VPS本地,必须有/home/backup目录,远程FTP必须有backup目录

  • 小丑 小丑

    没看到有发送到邮箱的代码啊

    1. 小夜 小夜

      echo "主题:数据库备份" | mutt -a /home/backup/$DataBakName -s "内容:数据库备份" $MAIL_TO

  • andy andy

    小夜 请问这个设置的时间是按照什么时区来算的服务器吗?
    如果是buyvm 那是按照什么时间

    1. 小夜 小夜

      你可以先执行一下 uptime 然后,按这个时间计算

  • Stleg Stleg

    小夜 .求一个hostloc的邀请码 非常感谢.
    只能看不能回复太痛苦了

  • norion norion

    内存小 sendmail 占资源怎么办

    1. 小夜 小夜

      yum remove sendmail 或 killall sendmail

  • online coupons online coupons

    给我留下了深刻的印象,阅读这样一个强大的故事讲述 LinuxVPS??????????????FTP?? - ????. 我会后对我的优惠券网站链接到这个博客帖子。我会回来的阅读更多.

  • 蛋总 蛋总

    小夜,只想留一天怎么办,留得太多了,硬盘不够了

  • malsvent malsvent

    小夜姊姊
    那个lftp下面的exit并不会离开lftp
    要直接在lftp那行后面加

    1. malsvent malsvent

      要直接在lftp那行后面加 << END
      才会正常离开ftp
      不然lftp会一直占着连线
      lftp -u $FTP_USER,$FTP_PASS -e "mirror -R --only-newer /home/backup $FTP_backup" $FTP_IP << END
      像这样才ok

  • 延帝 延帝

    请问在哪修改端口呢,如果我的ftp默认端口不是21,而是122,那在脚本哪修改之后才可以呢?

    1. 小夜 小夜

      FTP地址里加端口,例如:12.34.56.79:122

  • geox geox

    写了一晚上才写出来一个不太像样的脚本,等我写完了,才告诉我这里有个更好的:)

    1. 小夜 小夜

      哈哈,同样的事情我也干过……

    2. geox geox

      你这个脚本好象隐藏文件没打包进去吧?

  • 星星 星星

    没有windows的吗

  • Tanky Woo Tanky Woo

    还可以在数据库那层循环里在加一层循环,把每一个表单独存储。

  • dongdong dongdong

    能否增量备份呢,如果每次都备份下根目录所有文件,文件多的话就很不给力啦

    1. 小夜 小夜

      如果像dz论坛这一类,只要备份目录,换成附件当前月份即可。
      或者,用find命令,查找后再打包。

  • Car Parts Wholesale Car Parts Wholesale

    小夜...第一个按照这样备份成功了.第二个搞了之后没有备份.也木有收到邮件
    然后按照步骤再搞出现这个问题...求解决
    crontab: installing new crontab
    crontab: error renaming cron/tmp.XXXXFms3gS to cron/root
    rename: Is a directory
    crontab: edits left in /tmp/crontab.XXXX10xLhz

  • 温州夜生活 温州夜生活

    小夜,这个自动备份 可以用sftp代替ftp吗? 我的VPS小内存不想装ftp了

    1. 小夜 小夜

      如果是2个VPS互相备份的话,用rsync更方便一些。回头出个教程。

    2. xysemies xysemies

      期待rsync
      教程呵呵

  • 温州夜生活 温州夜生活

    好啊 小夜总是很给力啊 我的VPS是你推荐的买的 技术也是你这学的 期待小夜教程

  • 祈祷 祈祷

    请问下,这个备份的,我是没有安装FTP的,上传都是使用winscp这个的
    能备份吗?

    1. 小夜 小夜

      可以的,VPS上默认都会有FTP客户端软件。这里的使用FTP上传,是指上传到你的FTP空间中。不需要在VPS中安装ftp服务器端软件。

  • xiaoniuwang xiaoniuwang

    这个怎么恢复比较方便诶? 小夜写下吧~

    1. 小夜 小夜

      web是直接打包的目录,解压就可以。mysql是按数据库名字导出的文件,在phpmyadmin新建好数据库,再直接导入就可以了。

  • 风

    夜MM,除了FTP和数据库那些密码神马的其他不用更改了吧?

  • huli huli

    小夜MM

    在最后一步 输入 00 00 * * * /root/AutoBackupToFtp.sh 以后出现错误提示 E486: Pattern not found: root 是怎么回事呢?

    谢谢

  • vincent vincent

    只需要数据库备份。无需备份网站文件。怎么弄?

    1. 小夜 小夜

      tar zcf /home/backup/$WebBakName $WEB_DATA 和 put $WebBakName 前面用#注释掉

    2. vincent vincent

      谢谢小夜!

  • 老白 老白

    AutoBackupToFtp.sh
    这个文件放在哪里啊,放在其他目录可以吗?

  • 老白 老白

    我的VPS 装了kloxo ,这个脚本没有生效。请问怎么改?

  • 郭

    用这个脚本为什么收不到邮件,可以传到FTP

    1. 小夜 小夜

      检查您那个MUTT发邮件的组件是否好用,再看看邮件的垃圾箱。我一般是上传FTP就可以了,邮件有没有无所谓了。

  • abc abc

    [root@50ml ~]# /root/AutoBackupToFtp.sh
    : No such file or directoryine 1: 锘?!/bin/bash
    : command not foundtp.sh: line 12:
    : No such file or directoryine 20: cd: /home/backup
    'root/AutoBackupToFtp.sh: line 22: syntax error near unexpected token `do
    /root/AutoBackupToFtp.sh: line 22: `for db in `/usr/local/mysql/bin/mysql -u$MY'QL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATAbaseS' | xargs`; do

    打包不成功,这是什么问题呢?
    /home目录下已经建了backup文件夹了

    1. 小夜 小夜

      感觉像是编码问题,你是不是在本地用记事本改文件了?
      直接下载到linux下面,用vi改个试试。

    2. abc abc

      tar: /home/wwwwroot: Cannot stat: No such file or directory
      tar: Error exit delayed from previous errors
      /root/AutoBackupToFtp.sh: line 33: ftp: command not found

      还出现这个问题,打包文件大小也不对

    3. 小夜 小夜

      你要确认,你要备份的网站目录是:/home/wwwwroot/ 确认一下?
      你这里写的是4个w,LNMP默认的是3个

  • 小艾 小艾

    执行了正常,但是把data下载下来,发现是空的,是为什么啊~

    1. 小夜 小夜

      mysql密码输入错误,或者,mysql命令执行不正常。按照.sh文件里面的命令,先执行一下。我曾经遇到过一次,是因为本地用记事本改sh文件,格式错误。

  • 小艾 小艾

    按照.sh文件里面的命令,先执行一下。
    这句话是什么意思啊,小夜~

    1. 风

      这话的意思就是你先ssh执行以下里面的命令~看看成不成功,成功了再用shell

  • 夜郎 夜郎

    小夜酱~

    如不需要上传数据库到FTP应该怎么改脚本? (数据库要发送到邮箱的)

    1. 小夜 小夜

      #上传到FTP空间,删除FTP空间5天前的数据,这句下面的代码,在前面用##全部注释掉就可以了。#是注释,不执行操作。

    2. 夜郎 夜郎

      这方法貌似不行,因为全部注释的话, Web也不能上传到FTP了。

    3. 小夜 小夜

      put $DataBakName 这行注释掉,这行是上传数据库文件。

    4. 夜郎 夜郎

      O了! 原来数据库进了垃圾邮件里面,难怪一直没找着。 hehe

  • 夜郎 夜郎

    夜郎呼叫小夜酱~~~~~

    1. 小夜 小夜

      那就只注释:put $DataBakName 这一行是上传数据库文件到FTP的

    2. 夜郎 夜郎

      其实一开始我有尝试注释掉 put $DataBakName,mutt也安装了,但就是一直无法接收邮件,真是奇了个怪。 hehe

  • 真美购 真美购

    win2003主机可以用吗?

  • 我是帅锅 我是帅锅

    夜总我测试的时候出现这个错误 导致我一直没备份成功 翻译出来的结果
    是数据不给写入 这个是我这边VPS的问题 还是FTP呢?
    希望你帮忙告知一下啦```谢谢

    local: Data_20120620.tar.gz remote: Data_20120620.tar.gz
    227 Entering Passive Mode (216,69,186,142,145,75)
    150 Ok to send data.
    226 File receive OK.
    121988787 bytes sent in 41.2 secs (2.9e+03 Kbytes/sec)
    local: Web_20120620.tar.gz remote: Web_20120620.tar.gz
    227 Entering Passive Mode (216,69,186,142,247,192)
    150 Ok to send data.
    451 Failure writing to OFF database, saving file, 77.
    3841285379 bytes sent in 1.42e+03 secs (2.6e+03 Kbytes/sec)
    221 Goodbye.

  • xiaohan xiaohan

    40G+数据,每日备份到远程FTP有点难度啊。有什么解决方案没有

    1. 小夜 小夜

      看新手教程,新手教程8,RSYNC。每天,主端备份一下MYSQL数据库。
      从端,增量备份全部文件+数据库单独备份文件。配置一下就好,很简单。

    2. xiaohan xiaohan

      谢了

  • xiaohan xiaohan

    能不能设定备份 /home/www目录,但是排除掉 /home/www下面的几个图片文件夹呢

    1. guiplee guiplee

      应该可以。压缩的时候选择一下文件夹就可以了啊

  • Bon Bon

    腳本要放在哪?

  • wormcy wormcy

    local: Data_20120808.tar.gz remote: Data_20120808.tar.gz
    227 Entering Passive Mode (198,148,112,73,113,166)
    ftp: connect: No route to host
    local: Web_20120808.tar.gz remote: Web_20120808.tar.gz
    227 Entering Passive Mode (198,148,112,73,92,29)
    ftp: connect: No route to host

    夜总 这个怎么办

  • 尛帥 尛帥

    小夜,导出的数据库是GBK编码模式啊,我的网站数据库是UTF-8的。备份的数据导入的话会乱码报错。。。

    1. 小夜 小夜

      这个我就真心不知道了,我从学习做网站开始,就用UTF-8编码的。

  • 浪子 浪子

    小夜,什么时候出个vps自动备份到dropbox的教程啊。在网上找了很都教程,都没搞成功,基本上就是脚本有问题,要是有dropbox的备份的话,数据比ftp还安全。希望你能出个时间写下吧。期待中。.....
    最后谢谢你。从了解vps到现在用上vps都是看你博客成长的。

    1. 漂浮哥 漂浮哥

      百度搜,有个叫时光亭的博客里的一篇文章,按照步骤来就行了,我就是用他的,完全无压力

  • 1943 1943

    webmin无压力

  • babytomas babytomas

    如果可以上传到百度网盘就爽了

  • 学霸网 学霸网

    看起来很厉害的样子。。。。只是发通知到EMIAL哈?能不能把备份文件发到EMAIL邮箱?

  • 非凡网博客 非凡网博客

    每天都备份有点快了 一周备份两次就可以了~

  • 评论已关闭