几周前,我们与Acronis和CPanel一起举办了关于安全和备份最佳做法的网络研讨会,因为这两家公司都提供这方面的软件。Acronis开发了基于云的网络安全软件,特别是专门为其他服务提供商提供备份和灾难恢复。而CPanel则帮助这些服务提供商使他们的客户能够通过一个成熟的仪表板来管理他们的系统。这次网络研讨会是在CloudFest上的另一个联合演讲的后续。该网络研讨会提出了相当多的好主意,我强烈建议你观看它。然而,网络研讨会总是时间有限,所以我们无法涵盖我所希望的一切。因此,在这篇博文中,我将介绍一些由于时间不够而没有讨论的方面,特别是与MariaDB有关的方面。
备份是一个非常重要的话题,经常被忽视,尤其是在涉及到数据库的时候。为什么备份如此重要?嗯,正如Acronis的Jeff Hardy在网络研讨会上所说的,以及他在MariaDB服务器安全迷你嘉年华上的 "网络保护的经济模式",数据在IT行业相当于黄金。这意味着,数据丢失会严重削弱一个公司的实力。话说回来,并不是所有的数据都是平等的。有些数据是比较重要的。例如,失去气象站的一些传感器数据比失去客户交易的影响要小得多。在考虑备份要求时,这种思路应该指导你,这也是本清单中第一项的内容。
考虑你的情况
在你开始实施一个备份系统之前,先看一下系统的需求。你是在照顾一个简单的WordPress网站,几天或几周才看到一次编辑?这是一个有点受欢迎的网店,每天有100-200个订单?或者你正在运行一个在线游戏平台,有成千上万的并发用户,他们的所有行为都需要被记录。根据你所处的情景,你应该做出相应的计划。
对于我们的WordPress的例子,在一周内每天晚上安排一次备份,同时保持每两周或每月的快照,可能就足够了。与备份WordPress网站相关的费用通常是相当低的,因为大多数时候数据库本身是相当小的。
当我们看一下我们的网上商店的情况,事情就变得有点复杂。通过每晚的备份,我们不包括当天的订单。丢失这些可能是相当昂贵的。在这一点上,根据数量,我们应该开始考虑如何缓解工作日期间的故障。
然而,当我们看一下我们的游戏平台情况时,我们开始遇到真正有问题的情况。通常情况下,受欢迎的服务会因停机而产生巨大的成本。虽然高可用性是一个正交的话题,我希望在未来能涉及到,但HA、备份和灾难恢复是携手并进的。对于这样一个系统,备份是必须的,但这还不够。快速恢复是很重要的,这只能通过让机器同时运行,准备好接管来实现。
正如你所看到的,根据不同的情况,你的备份策略需要规划。每种备份方法都有与之相关的成本,包括时间、金钱和应用影响(停机时间)。
考虑备份的影响
进行数据库备份并不像复制数据目录那么简单。在一个活跃的系统中,数据库系统最终将几乎不断地读写数据目录。虽然从备份的角度来看,读并不是那么麻烦,但写却很麻烦。在没有采取一些锁来确保一致性的情况下进行复制,意味着你的备份将无法使用,因为它可能包含陈旧的和当前的数据,这取决于文件的哪一部分先被复制。因此,我们得出的结论是,某种形式的写锁是必要的。这就是我们的主要讨论点所在。
在备份过程中,由于硬件忙于复制字节,数据库将无法进行写入,而且读取性能也可能变差。这对你的使用情况来说是否可以接受,是一个需要考虑的问题。通常情况下,备份是在流量较低的时期(如晚上)进行的,以尽量减少影响。备份创建的影响最大的因素是备份方法本身,这就是我们接下来要看的内容。
逻辑备份与物理备份
现在我们已经评估了我们的系统和需求,我们需要考虑我们有哪些工具可以用于备份。MariaDB提供了两个专用工具。它们是:mariadb-dump 和mariadb-backup ,虽然最终结果相似(创建一个备份),但它们之间的区别在于如何创建和存储该备份,这导致了巨大的利弊不同。
逻辑备份(简单但缓慢)
mariadb-dump 将有效地生成一个SQL命令的文本文件。其中一些命令的形式是 ,而另一些则是 语句、 语句,等等。通过运行这些命令,人们可以重新创建一个完整的MariaDB数据库的内容。数据CREATE TABLE ... INSERT CREATE USER 在逻辑上存储在文本文件中,而不是数据库使用的相同的物理表示。
这种方法的优点是,它非常容易运行,而且生成的SQL在很大程度上可以跨数据库系统移植。这意味着这种备份格式(尽管需要做一些工作)可以与其他数据库系统互换使用。检查文本文件并了解你的备份内容也是相当容易的。
这种方法的缺点是转储本身将是相当大的。文本文件中存储的数据不会有二进制表示,因此整个文件会比较大。一个更大的备份需要更长的时间来创建,也需要更长的时间来恢复(可能需要几个数量级的时间)。另外,在备份过程中,除非使用--single-transaction 作为命令标志之一,否则整个系统将不能被写入,因为所有的表都在FLUSH TABLES WITH READ LOCK 。
物理备份(快速但复杂)
mariadb-backup 是mariadb-dump对物理备份的等价物。这意味着备份将包含由存储引擎(很可能是InnoDB和Aria)存储在磁盘上的实际字节。
通过采取物理备份,mariadb-backup比mariadb-dump有某些优势。首先,在备份创建过程中,有一个明显的速度提升,因为系统只需要复制数据块,而不是在写入磁盘前将其转换为SQL语句。该工具还考虑到了数据库系统上当前正在运行的事务,并且只在所需的最小时间内锁定表。此外,该工具能够进行增量备份,当数据快速变化和备份大小是一个问题时,这是一个非常有用的功能。
这种备份程序的缺点是,由于没有简单的文本文件可以检查,所以备份不容易验证。此外,基于表的备份实现起来更加复杂,需要一个更多的过程。关于更多的细节,你可以查阅知识库中关于InnoDB的文章。
尽管如此,尽管mariadb-backup 需要一个更复杂的过程,但由于备份过程的速度和额外的功能,它是MariaDB的推荐备份程序。
测试你的备份
不言而喻,备份的目的是为了在发生故障时使用它。然而,经常被忽视的是实际测试恢复工作。这意味着,如果你不能恢复你的备份,你实际上就没有备份!因此,测试一下你的备份是否有效是很重要的。因此,经常测试恢复程序是很重要的,以确保确实没有问题。因此,我强烈建议经常进行灾难恢复模拟,比如每3-6个月一次。
结论
正如你所看到的,备份并不是一个简单的话题。它有许多细微差别和许多可能的解决方案。在网络研讨会上,我们与Acronis深入讨论了这个话题,我们可以看到,没有一个适合所有的尺寸。此外,所需的自动化也是一项非同小可的工作。这就是为什么我印象深刻地看到Acronis和CPanel将这些最佳做法中的大部分作为选项或调整,供主机供应商在网络界面上使用。在那里,人们可以直接从界面上安排备份,执行全部或部分恢复(直到表一级)。这就有效地抽象出了细枝末节的细节,同时隐含地遵循了这里概述的最佳实践。
我期待着与Acronis和CPanel就如何设置和管理数据库服务器进行更多讨论。我相信在那里获得的洞察力将为MariaDB带来更好的备份功能。如果你对MariaDB有什么功能要求,请记住,你可以随时在我们的JIRA跟踪器中提交任务。
