嘿,大家好!我们有一些很棒的消息要和您分享,关于我们最近作为 Manticore Search 6 发布的 Manticore 备份工具。如果您重视自己的数据并希望确保其安全性,那么这绝对是您想要查看的内容。
该工具在备份您的 Manticore 数据方面是一个颠覆性改变。您不再需要担心因系统崩溃或其他不可预见的事件而丢失重要信息。借助新工具,您可以轻松地通过将其添加到您的 cron 作业中来自动化备份过程。这意味着您可以放松心情,知道您的数据得到了保护。
历史
过去,保护您的数据是一项艰巨的任务,需要手动备份,这通常耗时且容易出错。让我们回想一下这一过程是多么具有挑战性。
Manticore Search 支持两种类型的表:RT
(实时)和 plain
。虽然这两者有不同的用途,但值得注意的是,备份 plain 表相对容易,而 RT 表则需要更为细致的方法。
RT 表备份
您可能在很长一段时间内都在为备份 Manticore Search RT 表数据而苦恼,找不到任何可靠的工具来使这一过程无缝化。如果您感兴趣,让我带您回到记忆中的那段时光,解释一下手动备份过程的内容:
- 首先,停止 Manticore Search 并确保所有数据已正确刷新,程序已正确退出是很重要的。
- 接下来,您需要通过查阅 Manticore 配置来找到
data_dir
/path
文件夹,并复制所有数据。这确保所有数据都被保存,并且在必要时可以恢复。重要的是要注意,处理大量数据时,备份过程可能需要一些时间,导致实例停止期间出现停机。但是,这一步是确保您数据的安全性和可用性的必要步骤。 - 最后,您需要重新启动 Manticore Search。
或者,您可以 set global maintenance=1
,然后执行备份,或者将您的应用程序切换到 _readonly
监听器以确保所有写入操作都被暂停。
Plain 表备份
当您在 Manticore Search 中使用 plain 表时,磁盘上的文件仅在您运行索引器或通过 SQL 查询更新属性时更新。这种简单的方法使备份索引变得简单。虽然这并不是一项困难的任务,但我们仍计划将其纳入备份工具。您可以保持关注,通过查看相关的 issue 来获得更新。
新备份工具提供了一种显著更简单的备份处理方式。通过它,一切都变得简化和直接。您甚至可以安排定期备份,因此您可以随时在指尖握有最新版本的数据,而无需停机或麻烦。
开发备份工具的过程
在开发该工具时,我们需要为现有的 Manticore 系统添加额外功能:在备份过程中确保数据一致性至关重要的 FREEZE
和 UNFREEZE
命令。
在 Manticore Search 中,FREEZE
和 UNFREEZE
命令的工作方式与 MySQL 传统的锁定和解锁表特性略有不同。当使用 FREEZE
时,它停止将数据刷新到磁盘,但仍允许对表进行写入和从中选择更新的数据。重要的是要注意,如果在执行大量插入的漫长备份操作时,您的 RAM 块的大小超过 rt_mem_limit
阈值,可能会导致数据被刷新到磁盘。只有在刷新完成后,写入操作才会被阻止。尽管如此,这种方法仍然在完全锁定表、保持数据一致性以及确保数据库写入可用性之间取得了平衡,同时表处于冻结状态。
这些功能对可靠的 在线 备份解决方案至关重要。没有它们,恢复您的数据可能会导致数据不一致或损坏,从而造成重大麻烦并耗费您时间和资源。为了确保正确的备份逻辑,我们首先冻结所有表。接下来,我们逐个备份每个表,并在每个备份后执行 UNFREEZE
。此外,该工具具有保护措施,在过程失败或被用户终止时会自动为所有表执行 UNFREEZE
。
在确保我们拥有安全实施数据复制逻辑所需的命令之后,下一个问题出现了——我们应该使用哪种编程语言来实现该工具?我们的团队已经决定将 PHP 作为我们 Manticore Buddy 项目 的首选语言。因此,对于我们来说,使用 PHP 实现数据备份过程是一个简单的决定:
- 首先,PHP 提供比通常用于类似工具的 Bash 更大的灵活性。这对我们项目的特定要求至关重要。例如,它使工具能够在 Windows 环境中使用,而使用 Bash 则不可行。
- 其次,更重要的是,我们设计它的方式使我们可以在 Manticore Buddy 中重用相同的代码,同时保持相同的灵活性。
备份工具需要某些外部模块,包括压缩。为了简化其使用,我们静态编译 PHP,并将所有扩展包含在其中。这个合并的实体被称为 manticore-executor
。本质上,它就像 PHP,但包括了运行各种 Manticore Search PHP 项目所需的一切:Manticore Buddy 和备份工具。您可以查看我们关于
Manticore Buddy 开发以及我们如何使用 PHP 的故事
。
这使得该工具不仅可以从命令行使用,还可以作为Manticore中的一个新SQL命令使用,采用相同的代码库。
现在,让我们通过使用CLI和SQL接口来学习如何备份您的数据吧!
manticore-backup - CLI 版本
新的备份工具在 Manticore 6 中发布,因此如果您按照Manticore的 安装指南 页面,安装它将变得非常简单。
假设您已经成功安装了备份工具,您现在应该可以访问manticore-backup
可执行文件。让我们看一些您在日常工作中可以使用该工具的实际示例。首先,确保您已经创建了一个/backup
文件夹来存储所有备份。这个文件夹将在以下所有示例中用于说明该工具的工作方式,当然它不必就一定是/backup
,您可以选择任何您想要的路径。
- 场景 1:您想备份整个Manticore实例:
manticore-backup --config=/etc/manticore/manticore.conf --backup-dir=/backup
- 场景 2:您只想备份几个表:
manticore-backup --config=/etc/manticore/manticore.conf --backup-dir=/backup --tables=users,messages,products
记得定期备份您的数据,以确保一切安全。此外,建议将其镜像到不同的服务器或数据中心,以确保所有数据始终可用。
查看 备份帮助部分 ,深入了解如何使用该工具。
如何使用SQL备份命令?
Manticore 6 还允许您使用SQL接口进行备份,而无需安装任何东西或遵循特殊说明。您可以使用在上一节中讨论的相同方法来备份整个实例或特定表。
- 对于整个实例备份,请使用此命令:
BACKUP TO /backup
- 对于特定表的备份,请使用:
BACKUP TABLES users, messages, products TO /backup
请记住,备份大量数据可能需要一些时间。为了避免在运行BACKUP命令时担心失去与Manticore的连接,您可以异步执行查询。您将立即收到一个查询ID,并可以稍后通过发送命令SHOW QUERIES
来检查备份进程状态。这是一个示例:
BACKUP TO /backup OPTION async=1
就是这么简单!
现在,您可能想知道,“那备份的数据怎么恢复呢?”
恢复
我们已经使用两种不同的方法成功创建了备份,确保您的数据安全无虞。但是您如何恢复数据呢?别担心,我们会为您提供帮助。
目前,manticore-backup
只支持在Manticore Search守护进程停止时恢复完整备份,但我们有
计划
添加对单个表恢复的支持。
假设您已将数据备份到/backup
,并且备份工具创建并存储了您所有的数据在名为backup-20230305121400
的文件夹中。您需要停止您的Manticore Search实例,删除所有数据和配置,并运行命令:
manticore-backup --config=/etc/manticore/manticore.conf --backup-dir=/backup --restore=backup-20230305121400
如果您仍然想恢复特定表,您可以在SQL模式下使用
IMPORT TABLE
命令。例如,如果您的备份中有一个名为users
的表,您只需发送这样的查询:
IMPORT TABLE users FROM '/backup/backup-20230305121400/data/users'
您可以在文档中找到有关manticore-backup --restore
的更多信息
在这里
,以及有关IMPORT
命令的信息
在这里
。
总结
在生产环境中运行任何事情时,备份数据是绝对必须做的。而现在,有了manticore-backup
和BACKUP
命令的帮助,您可以轻而易举地做到这一点。
要开始使用新的备份工具,请访问我们的 文档 。我们相信您会喜欢它!如果您有任何功能请求,请通过 GitHub Issues 与我们分享。
最诚挚的问候, Manticore团队 ❤️