我们在多台服务器上运行 Web 应用程序,我们希望通过将关键数据备份到 S3 来增加额外的冗余层。关键数据是 MySQL 数据库和一个包含动态创建的站点资产(主要是图像)的文件夹。某种基于 rsync 的解决方案最初似乎是最好的计划。几年前,我们尝试过S3命令(特别是 s3cmd sync)取得了一些成功,但我们发现它并不是特别可靠,尽管这种情况可能已经发生了变化。不过,我发现 rsync 解决方案可能不太适用于使用 mysqldump 创建的单个 db.sql 文件,我认为这意味着每次都要传输整个数据库,对于超过 1GB 的多个数据库,这将很快增加大量流量(和 $s)。使用图像文件,我可以简单地传输过去一天内修改的文件,这将简单得多。我应该考虑什么方法?
答案1
在我看来这是一份完美的工作已打开。试一试。如果它解决了您的问题,请告诉我们。
答案2
正如您所猜测的,s3cmd
它比几年前更加可靠,很多人都在使用它,包括我,没有任何问题。此外,亚马逊 S3 不收取上传数据的费用,因此金钱因素不是问题,但您肯定希望避免不必要的传输,这种传输大多数时候都发生在数据库备份中。
我在使用 MySQL 时也遇到了同样的问题,因为不幸的是它不支持增量备份。这就是为什么我编写了一个 bash 脚本,为每个数据库将表转储到不同的文件中。之后,我将其压缩并zdiff
与之前的副本一起,忽略最后 2-3 行(其中mysqldump
写入当前日期)。如果文件之间没有差异,我不会在云中同步内容。这种方法的缺点是解决方案的复杂性,这在恢复数据时增加了额外的步骤。
此外,如果您对服务器上运行的软件的开发有任何想法,您可以为每个表添加一个额外的参数,以跟踪更改。因此,您可以根据此指示备份脚本仅转储自上次备份以来发生更改的表。
答案3
普通 Rsync 是备份文件的不错选择,因为它简单且性能良好。但是,如果在 Rsync 时修改了文件,则副本可能会损坏。因此,确保关闭所有文件至关重要。在您的例子中,如果有几个图像文件被更改和更正,则下一次 Rsync 无论如何都会覆盖它们,因为 Rsync 只会复制修改过的文件,因此它就像一个自我修复过程。所以我认为 Rsync 并保存在 S3 中是一个不错的选择。