blog-post

新的备份和恢复方法

嘿,大家好!我们有一些好消息要和您分享,关于我们最近作为 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 系统添加额外功能:FREEZEUNFREEZE 命令,这在确保备份过程中的数据一致性方面起着至关重要的作用。

Manticore Search 中的 FREEZEUNFREEZE 命令的工作方式与 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. 场景 1:您想备份整个 Manticore 实例:
manticore-backup --config=/etc/manticore/manticore.conf --backup-dir=/backup
  1. 场景 2:您只想备份几个表:
manticore-backup --config=/etc/manticore/manticore.conf --backup-dir=/backup --tables=users,messages,products

请记得定期备份您的数据,以确保一切安全。此外,建议将其镜像到不同的服务器或数据中心,以确保所有数据始终可用。

查看 备份帮助部分 以深入了解如何使用该工具。

如何使用 SQL BACKUP 命令?

Manticore 6 还允许您使用 SQL 接口进行备份,而无需安装任何东西或遵循特殊说明。您可以使用上一节中讨论的相同方法备份整个实例或特定表。

  1. 对于整个实例备份,请使用此命令:
BACKUP TO /backup
  1. 对于特定表备份,请使用此:
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-backupBACKUP 命令,您可以轻松完成。

要开始使用新的备份工具,请访问我们的 文档 。我们相信您会喜欢它!如果您有任何功能请求,请通过 GitHub Issues 与我们分享。

最好的祝福,Manticore 团队 ❤️

安装Manticore Search

安装Manticore Search