![我如何备份我客户的数据?](https://linux22.com/image/531514/%E6%88%91%E5%A6%82%E4%BD%95%E5%A4%87%E4%BB%BD%E6%88%91%E5%AE%A2%E6%88%B7%E7%9A%84%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
如果您运行 SaaS 应用程序或开发此类应用程序,我很乐意听取您的意见。在客户数据的安全至关重要的情况下,您如何保护和备份数据?我很想知道您的主要主机(例如 Heroku、Engine Yard、Rackspace、MediaTemple 等)以及您使用谁进行备份。
尽可能详细 - 例如快速概述您的服务和您存储的数据(例如图像),当用户上传图像时会发生什么(例如,它们会进入您的 Linode VPS,并发布到网站供他们查看 - 然后它们会自动发送到 AWS 或任何地方,然后托管服务提供商每周将它们备份到磁带上一次,您也可以将它们备份到您的家中/办公室)。
如果您还能提供一些关于存储单位成本(每 GB/每位用户/每月)的平均数,我将不胜感激。
准备启动我的应用程序,我希望对所涉及的细节有更多的了解。
谢谢!
答案1
我负责一个相对较大的在线协作服务的运营。我们的 MySQL 数据库中有近 200GB 的关系数据,以及约 20TB 的用户生成内容。
我们拥有自己的服务器硬件,因此我们拥有一些文件存储服务器来存储用户生成的内容。这些服务器运行 MogileFS,配置为在集群中复制每个文件的 3 个副本。由于我们在 3 个不同的服务器上都有副本,因此我们不会在文件服务器上使用 RAID。存储 3 个副本意味着我们可以处理驱动器故障,或者关闭服务器进行维护,并且仍然拥有每个文件的 2 个副本。
每小时,我们都会使用自己编写的脚本执行异地备份。该脚本会查找新文件并在异地服务器上进行备份。该脚本会保留自己的数据库,其中包含已备份文件的确切信息。(我们可以只使用时间戳来确定要复制哪些文件,但这不允许我们在需要时“回填”备份。我们也可以只检查远程服务器是否存在每个文件,但由于 MogileFS 中有 1.5 亿个文件,这将需要很长时间!)
我们的远程备份使用对称密钥加密。这实际上非常优雅。我们有一个主备份密钥。私钥存储在保险箱中,公钥在我们所有的文件服务器上都可用。备份使用主公钥加密。这意味着它们都可以用主私钥解密,但即使我们的服务器全部被攻破,攻击者也无法访问加密的备份。
我们使用 Backup Manager 来处理 MySQL 数据库备份和其他各种服务器备份。Backup Manager 非常棒 - 它会自动处理所有事情,例如加密备份并将其发送到异地。Backup Manager 执行服务器上指定目录的增量备份,并为我们的数据库运行 mysqldump。
您甚至可以通过备份管理器传输其他工具——例如,我正在使用备份管理器测试 Percona XtraBackup,以便更快地备份 MySQL。(从技术上讲,XtraBackup 不会加快备份速度——它加快了恢复速度。如果没有 XtraBackup,我们需要将近一周的时间才能恢复我们的 40GB MogileFS 数据库。它有助于调整 MySQL,但即便如此,恢复性能也不够好。我刚刚开始测试 XtraBackup,它可能可以让我们在几小时内恢复数据库,而不是几天。)
我强烈建议使用备份管理器——它的设置速度非常快,并能处理建立远程备份的所有机制。我甚至已经开始在自己的两台个人服务器上使用它,将加密备份存储在 Amazon S3 上。除非您的数据集非常大,否则备份管理器应该能够为您处理一切,包括服务器配置、源代码和用户数据。它是自动的、加密的,并且使用起来非常简单。