我使用 rackspace 云站点,无法访问其服务器上的 SSH 或 RSYNC,但我可以访问 SSHFS。
我希望能够将我的云网站备份到我的本地 Ubuntu 服务器,该服务器具有 SSH、RSYNC 等。
到目前为止,我认为最好的方法是使用以下命令将站点安装到本地服务器上:
sshfs [email protected]:/path-to-site/ ~/Sites_Mounted/site-name/ -o reconnect,cache=no,compression=yes,ServerAliveInterval=15
重新连接 - 如果连接断开,将重新连接
Cache=no - 因为我们需要实时备份而不是旧的缓存文件
压缩——尽量减少带宽使用
ServerAliceInterval - SSHFS 在很长时间后退出并崩溃
然后我考虑使用 RSYNC 命令将堆积的站点文件复制到本地服务器上的备份目录,然后当下一次备份在 12 小时后到期时,将备份目录复制/RSYNC 到新的备份目录(使用不同的名称,即 2012-01-01-sitename),然后使用 RSYNC 命令仅将远程服务器上的更改复制到包含旧/以前备份的新备份目录。
我的问题是,这种方法有效吗?如果有效,我需要使用哪些命令?是否可以将所有这些命令都包含在一个可以运行的 .sh 脚本中?
或者有没有更简单、更有效或更好的方法来做到这一点。
(我想我可以压缩服务器上的整个网站并下载,但这似乎占用大量资源)
答案1
我必须克隆几个基于云的服务器,这是我的方法:
停止所有正在运行的服务。如果这不可行,则需要单独进行数据库转储和备份(即使用 mysql、redis、solr 等的任何服务)。
在根目录中创建一个目录,即 /x
在 /x 上安装 /dev/sda1(或 xvda1 或您的根系统分区)(因为您可以将一个设备同时安装到两个不同的点。)这里的值是您不会收到 /proc 等设备的错误。如果您使用 lvm,快照也非常适合此。
此时,你有几个选择。如果你的服务器有足够的磁盘空间,只需创建一个目录 /y 并执行
tar -zcvf --exclude '/x/*' --exclude '/y/*' /y/root.tar.gz /x/
如果没有,那么您可以通过 ssh 将其发送至另一个节点:
tar -zcvf - /x/ |ssh -i /blah.pem [email protected] 'cat - > /tmp/root.tar.gz'
无论你选择哪条路线,你都可以下载 tarball。
最后,也可能是最简单的,但在我看来并不理想的,就是简单地将 /x/ 目录 rsync 到本地机器。
无论您走哪条路,如果您有大型数据库或不需要的 kruft,您可以通过将它们从 tar 过程中排除来节省时间(简单地复制正在运行的数据库可能会导致数据库副本损坏。)