自动定时备份VPS – 如何搭建个人网站

如何搭建个人网站系列:

  1. 域名和空间
  2. 熟悉Linux
  3. 安装LNMP和wordpress
  4. 小内存VPS优化
  5. 自动定时备份VPS
  6. 后记:上万访问量的考验

建设网站,备份是非常重要的工作,再好的VPS也无法100%保证数据的安全性(何况我用的这么便宜),下面介绍下备份网站主程序和使用dropbox备份网站附件、数据库。


一、使用Dropbox备份网站附件和数据库

如果没有Dropbox的可以注册,使用我的推广链接(https://db.tt/S96s2ZYk),咱两都增加500M空间。

登录Dropbox后,打开Apps页面,点击 Create App 按钮,创建一个App。安装下图操作:

最后要输入 App name。创建完成之后,就有App key 和 App secret 了,这个后面要用到。

用Putty登陆vps,获取最新的上传dropbox脚本:

wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh

配置:

chmod +x dropbox_uploader.sh #赋予权限
./dropbox_uploader.sh info #开始绑定APP

这里他会让你输入App key以及App secret,在刚刚我们创造的APP那里有! 然后他会询问你是App folder 还是Full Dropbox,按照刚刚我们上面的说明,按f,然后回车! 然后他会给出一个地址,自己复制下来用浏览器打开,授权给这个APP! 授权好了,回到SSH上,按下回车。 如果不出意外的话,我们就配置好了,可以用下面的代码测试!

./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old

显示Done就Ok了。然后我们创建自己的备份脚本

vi backup.sh

输入内容:

#!/bin/bash
SCRIPT_DIR="/root" #这个改成你存放刚刚下载下来的dropbox_uploader.sh的文件夹位置
DROPBOX_DIR="/backup" #这个改成你的备份文件想要放在Dropbox下面的文件夹名称,如果不存在,脚本会自动创建
BACKUP_SRC="/home/wwwroot /usr/local/nginx/conf" #这个是你想要备份的本地VPS上的文件,不同的目录用空格分开
BACKUP_DST="/tmp" #这个是你暂时存放备份压缩文件的地方,一般用/tmp即可
MYSQL_SERVER="localhost" #这个是你mysql服务器的地址,一般填这个本地地址即可
MYSQL_USER="mysqluser" #这个是你mysql的用户名名称,比如root或admin之类的
MYSQL_PASS="password" #这个是你mysql用户的密码
# 下面的一般不用改了
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tar.gz"
# 备份mysql数据库并和其它备份文件一起压缩成一个文件
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --all-databases > "$NOW-Databases.sql"
tar cfz "$DESTFILE" $BACKUP_SRC "$NOW-Databases.sql"
# 用脚本上传到dropbox
$SCRIPT_DIR/dropbox_uploader.sh upload "$DESTFILE" "$DROPBOX_DIR/$NOW.tar.gz"
# 删除本地的临时文件
rm -f "$NOW-Databases.sql" "$DESTFILE"

然后改为可自行文件:

chmod +x backup.sh #赋予权限

运行的时候就输入下面的代码即可:

./backup.sh

然后通过 cron 来设置定时运行脚本:

crontab -e

加入以下代码,:wq 保存

0 5 * * * /bin/bash /root/backup.sh

重启crontab,以后每天5点自动备份到dropbox,由于VPS是国外的,所以不会像国内打开dropbox这么慢。

/etc/rc.d/init.d/crond restart

最后发一下我实际使用的backup.sh

SCRIPT_DIR="/root"
DROPBOX_DIR="/KeenWon"
BACKUP_SRC="/home/wwwroot/default/wp-content/uploads" #只备份一直变动的上传文件夹,其他不用每天备份
BACKUP_DST="/tmp"
MYSQL_SERVER="localhost"
MYSQL_USER="******用户******"
MYSQL_PASS="******密码******" 
NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tar.gz"
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --all-databases > "$NOW-Databases.sql"
tar cfz "$DESTFILE" $BACKUP_SRC "$NOW-Databases.sql"

$SCRIPT_DIR/dropbox_uploader.sh upload "$DESTFILE" "$DROPBOX_DIR/$NOW.tar.gz"

rm -f "$NOW-Databases.sql"
rm -f "$DESTFILE"

此部分参考了 http://www.inbiji.com/biji/vps-data-is-automatically-backed-up-to-dropbox.html 纠正了其中错误


二、备份网站主程序

程序有修改的话,备份一个保存起来就好了,不用每天执行:

tar -zcvf wordpress.tar.gz /home/wwwroot/default/* --exclude /home/wwwroot/default/wp-content/uploads

其中 /home/wwwroot/default 是我的网站根目录,排除了uploads文件夹,因为后期会有大量附件,而且这个也会每天备份到dropbox。之前一篇文章

提到过使用 kindeditor 的好处就是文章插图也会上传到 /wp-content/uploads 文件夹,方便备份。



标签:

    • 使用dropbox是因为他稳定(比再买一个“不稳定”的VPS做备份安全多了),而且一般的网站,2G已经够用了。就拿本站来说,每次备份就几兆(数据库和图片附件,不用每次备份整个VPS)

      • 我的数据库达到20G被bluehost强制停了,太不厚道了.他说的不限空间流量的,也没到他说的20多万文件,我这个20G才一个文件而已

        • 数据库就20G?那你必须用更好的VPS呀,我没选bluehost就是因为看到不少人吐槽它。Linode貌似不错,我这小站用不起,你倒是可以说试试。

      • bluehost建议我用独立主机,好贵呀.我是维基站,这种程序国内没人会用,要啃英文材料.wikimedia特点是把文章都装在数据库里,这样文件数很少.国外主机都是不限空间的,限制文件数,这种设计比较省钱.维基站是为服务器集群设计的,独立主机都不一定坚持的住.当务之急是筹钱上好的机器,毕竟国内外没有几个人会用维基程序的,老美很喜欢这个,人气很火爆,动不动就出问题,也没人会修,维持成本高昂,等于是为主机商打工.

        • 你数据库是不是很多垃圾数据啊,就像wordpress一样,每写文章,会产生很多草稿,所以发出来的文章ID都不是连续的。我的数据库还小,大了以后就要把这些垃圾数据清一下了

          • mediawiki的設計就是這樣的,其他文件很少,只有700兆,所有文章在數據庫里,達到20G,這樣文件數很少,國外主機一般不怎么限制空間,限制文件數.一般數據庫壓縮后只有1/10體積,所以這個僅僅相當于discuz 的2.7G的水平,并不是很大,大家編撰的詞條很多.國內會用mediawiki的比大熊貓數量多不了多少,目前正在啃英文資料…

无觅相关文章插件,快速提升流量