在两台 VPS 之间实现自动异地备份

本文发布已超过一年,其中的内容可能已经过时。

就是记录一下设置 Wiki 的自动备份,在 Wiki 所在的 VPS 上定时对资料目录打包,然后从备份用 VPS 把打包好的文件传输过去。

之前遭遇过多次 VPS 挂掉而数据灭失的惨剧,最近一次就是幸苦写了十多个页面之后的个人 Wiki… 然后到现在都还木有把那些内容全部给补回来…虽然说现在使用了几乎不用考虑升级(也就大大减少了手贱的几率)的 Slackware 系统,但是以防万一还是做个异地备份的好。

异地备份重于泰山

为了方便设置备份时间和文件传输的安全性考虑,我把所有参与备份的服务器设置为了同一时区,并且使用 scp 命令来通过 SSH 完成文件传输。至于备份的脚本,设置为使用 cron 任务定期执行。

我的个人 Wiki 放在一台跑着 Slackware 13.37 的低配 VPS 上面,用的是 MoinMoin Wiki 系统,所有数据都保存在文件系统中而不需要数据库,所以只要给 Moin 文件夹打包就可以备份全部内容了。

先是在 Slackware 下面调整时区,我用 tzselect 不知为何木有作用,最后用了这个命令解决:

然后 vi /usr/local/share/moinbackup.sh 编写备份脚本:

这个脚本会删除前一天的备份并将 Moin 所在目录打包。

然后需要把脚本放到 cron 里并赋予执行权限,让它能够每日自动运行。这里我让它每日备份一次:

之后是设置 cron job 的执行时间,执行 crontab -e 即可编辑:

修改时间后保存退出。
这个时候可以手动运行一下脚本看能不能正确打包文件。

然后到备份服务器做设置。我的备份服务器运行的是 CentOS 5 32bit.

出于安全考虑,不能把备份文件放在 web 服务器可访问的地方,所以就不能用 wget 来下载到备份机,所以想到了用 SSH 来传输文件。
首先要给两台服务器配置证书认证。先在备份机执行 ssh-keygen , 全部默认设置就行,在本机生成一个 key. 然后到 /root/.ssh/ 目录下,把这个文件传输到生产机:

按照提示保存密钥并且输入密码过后就可以完成传输了。然后这个时候再尝试用 ssh 命令登录,应该就不再需要密码了。
如果提示 scp 命令找不到,安装 openssh-client 即可。

然后开始配置 cron job.
首先编辑备份用脚本 vi /etc/cron.daily/moin.sh

然后同样地,用 chmod +x /etc/cron.daily/moin.sh 赋予其运行权限,之后就要配置 cron 了。
CentOS 5 下不能用 crontab -e 来编辑配置,因为系统默认的 cron 程序不同。这里要直接编辑 vi /etc/crontab

注意这台备份机的时区也是 Asia/Shanghai. 我把每日运行时间设置成生产机的大约40分钟过后,保证生产机已经执行备份打包操作完毕,然后从备份机运行脚本将打包好的每日备份传输到本地并按照日期重命名存放。

以上设置目前已经成功运行。

--- TODO ---
还没有搞清楚自动导出 MySQL 数据库应该怎样操作,下一步是折腾带数据库应用的自动备份。
说不定还可以搞整下 Dropbox 上传w

{ 发表评论? }

  1. Lowstz Chen Google Chrome Linux

    配置好ssh 密钥登陆
    然后用本地rsync远程文件夹到dropbox文件夹里面就可以了

      • Lowstz Chen Google Chrome Linux

        google看几个例子,看下手册,然后自己试试就搞定了
        我路由里面的wiki是file base的,所以同步只要笔记本定时rsync文件到dropbox就行了, blog也是写完markdown编译成html后rsync到vps的

        同步备份显然rsync更专业,试下吧

回复 AstroProfundis 取消回复

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