备份网站 - 针对新手系统管理员的推荐策略和步骤

备份网站 - 针对新手系统管理员的推荐策略和步骤

我在 Linux 10.0.4 LTS 上运行 LAMP 网站。我是一名新手系统管理员(但我是一名开发人员),我正在寻求一些关于如何最好地为我的网站实施备份的建议。我的数据库是 mySQL,我的所有数据库表都使用 InnoDb 数据库引擎。

这些是我想要实现的备份的要求:

  1. 包含 mysql 数据库的增量和完整备份 我希望有每小时增量备份,也有每日、每周和每月备份 但我不清楚这些不同的备份数据集应该使用什么轮换 - 以及如何管理它们(更重要的是,如何从一组日期的完整/增量备份中恢复数据库)

  2. 我想压缩和加密数据,以便可以远程存储(Amazon S3)

  3. 我希望它完全自动化(即作为 cron 作业运行)。

注意:我的服务器是“无头”的,因为它没有安装 X 窗口或其他 GUI,所以我正在考虑使用 bash 脚本来实现备份。或者,如果有软件可以帮助我运行此类备份,那么它需要能够从命令行运行。

我需要备份的项目是:

  • mysql 数据库
  • 网站文件(在指定的文件夹中。理想情况下,我希望省略一些自动生成的文件)
  • 配置文件
  • 不同文件夹中的杂项数据文件

以下是我的问题:

  1. 是否有现有的软件可以用来执行此操作,或者我需要编写自己的软件(bash 脚本)?

  2. 建议使用哪种备份策略(每小时、每天、每周等运行一次),以及如何从特定时间点恢复网站?

如果我必须编写自己的 bash 脚本(作为 bash 脚本新手),如果有人可以提供一个骨架脚本来帮助我入门,我将不胜感激。

[编辑]

symcbean:您能否列出您需要我提供哪些进一步的信息,以便提供“更有针对性的建议”?就预算而言,我们只能说是零。因此,除了(专用)服务器托管 + Amazon S3 存储之外,我无法再支付更多费用。这也是为什么我需要使用开源软件或使用 Linux 上可用的工具编写自己的 bash 脚本。

这是一个新网站,最初备份的数据可能不到 1 Gb,但我完全预计数据每天至少会增长 100Mb。如果我每天进行完整备份并通过有线方式将备份文件发送到 Amazon S3,那么数据很快就会增加。

我建议进行增量备份,因为我想节省每天传输几 GB 数据所产生的带宽成本(更不用说服务器负载)。

此外,到目前为止,还没有人解释过如何在[每小时?]、每日、每周和每月备份之间轮换。

关于备份,网上有很多(大相径庭的)信息/意见。我只是想知道针对我上述特定情况,推荐的“最佳实践”是什么。

如果需要更多信息以便能够提出更“定制化的建议”,请告诉我,以便我可以提供所需的信息。

答案1

每小时增量备份,以及每日、每周和每月备份

我强烈建议不要在实时系统上使用 mysqldump。即使使用 innodb 表,也很难从正在运行的系统获取一致的备份。

与往常一样,您没有提供太多关于访问和预算方面的限制的迹象,也没有明确表明您在此想要实现的目标。

我建议使用 mysql 复制来维护热备用数据库。但要获得系统的一致快照,您需要关闭客户端上的复制,运行 mysqldump,然后打开复制并将转储文件保留在完整备份中。

就软件而言 - 您显然是在 MSWindows 环境中长大的。编写脚本很容易,而且用于压缩、加密、命名和移动文件的所有工具在 Linux 发行版中都是标准配置 - 唯一的问题是您如何使用它们。话虽如此,我首选的备份文件软件是 afio - 它通常不包含在最小安装中(您将拥有 tar、cpio、gzip、rsync、ssh)。如果您在 Google 上搜索 afio,您会发现很多文档解释了它与默认工具相比的优点。

只有当您知道如何恢复并且能够恢复备份时,备份才有用。

在我看来,增量备份是浪费时间。当然,当备份介质很贵的时候,这样做是有道理的——但现在情况已经不同了——与你的时间和精力以及数据的价值相比,存储相对便宜。在恢复系统时,你最不想做的事情就是弄清楚要恢复什么顺序的备份才能获得一致的映像——如果你的备份集中有一个失败的备份,那么一切都会变得非常糟糕。

最好的解决方案是热备用复制(使用 rsync 来处理文件,使用 mysql 复制来处理数据库)。然后定期从备用服务器创建异地映像(通过网络、磁带、DVD……)。

如果您真的缺钱,那么“热备用”可以很容易地存在于与实时站点位于同一机器上的第二个磁盘上,但出于个人偏好,我建议使用单独的机器。

答案2

除了拥有一个中央备份服务器外,我们还会定期将驱动器轮换到异地源。我们的部门有 rsync 设置,每个 Web 服务器都有一个密钥对帐户设置。这样,我们就有了一个盒子,它将连接到我们的每个 Web 服务器,执行 mysqldump,并在 mysqldump 上以及我们指定的 Web 目录上执行 rsynch。

要恢复:您可以使用 rsynch 重建到给定的某一天。

对于增量,它是设置不同的 cron 作业以您想要的时间间隔执行的问题。

如果您感兴趣的话,我可以提供更多详细信息。这是一个内部编写的脚本。

答案3

不久前我有一个与数据库相关的类似问题......你可能需要查看一下:如何从集体备份中恢复一个 mysql 数据库

至于 rsync,您可能需要查看以下网站:http://www.sanitarium.net/golug/rsync_backups_2010.html

相关内容