备份和恢复规划

备份 Neo4j 数据库并将其存储在安全的异地位置有两个主要原因。

  • 能够在发生故障时快速恢复数据,例如与硬件、人为错误或自然灾害相关的故障。

  • 能够执行例行管理操作,例如将数据库从一个实例移动到另一个实例,升级或回收空间。

备份和恢复策略

根据您的特定部署和环境,设计适当的备份和恢复策略非常重要。

在决定您的策略时,需要考虑以下几个因素:

  • 环境类型 - 开发、测试或生产。

  • 数据量。

  • 数据库数量。

  • 可用的系统资源。

  • 备份和恢复期间的停机容忍度。

  • 备份和恢复期间对 Neo4j 性能的要求。此因素可能会导致您决定在非高峰时段执行这些操作。

  • 对数据丢失的容忍度,以防发生故障。

  • 对停机的容忍度,以防发生故障。如果您对停机和数据丢失的容忍度为零,您可能需要考虑执行在线备份甚至计划备份。

  • 数据库更新频率。

  • 备份和恢复方法类型(在线或离线),这可能取决于您是否要

    • 执行完整备份(在线或离线)。

    • 执行增量备份(仅在线)。

    • 对备份网络通信使用 SSL/TLS(仅在线)。

    • 将您的数据库保留为存档文件(在线或离线)。

  • 您要保留多少个备份。

  • 备份将存储在哪里 - 驱动器或远程服务器,云存储,不同的数据中心,不同的位置等。

    建议将您的数据库备份存储在与数据库文件不同的单独的异地服务器(驱动器或远程服务器)上。这样可以确保如果您的 Neo4j DBMS 由于某种原因崩溃,您将能够访问备份并执行恢复。

  • 您将如何测试恢复例程以及测试频率。

备份和恢复选项

Neo4j 支持备份和恢复在线和离线数据库。它使用 Neo4j 管理工具 命令,这些命令可以从实时 Neo4j DBMS 或离线 Neo4j DBMS 运行。所有 neo4j-admin 命令必须以 neo4j 用户身份调用,以确保适当的文件权限。

  • neo4j-admin database backup/restore(仅限企业版) - 用于执行在线备份(完整备份增量备份)和恢复操作。要备份的数据库必须处于**在线**模式。该命令会生成一个不可变的工件,该工件具有可检查的 API,以帮助管理和操作。此命令适用于您无法承受停机的生产环境。

    如果使用 server.backup.listen_address 启用了访问权限,则也可以通过网络调用该命令。

    确保将备份服务器端口的访问权限限制为完全受信任的特定设备。应考虑防火墙策略。有关更多信息,请参阅 服务器配置部分

    在集群中使用 neo4j-admin database backup 时,建议从外部实例备份,而不是重用构成集群一部分的实例。

  • neo4j-admin database dump/load - 用于执行离线转储和加载操作。要转储的数据库必须处于**离线**模式。转储命令只能从服务器命令行调用,适用于停机不是因素的环境。该命令会生成一个存档文件,该文件遵循格式 <databasename><timestamp>.dump

  • neo4j-admin database copy - 用于复制离线数据库或备份。此命令可用于清理数据库不一致并回收未使用的空间。

不支持数据库的文件系统复制粘贴,这可能会导致意外行为,例如存储损坏。

在集群中备份和恢复数据库的注意事项

在集群环境中备份数据库与独立备份本质上没有区别,除了您必须知道要连接到集群中的哪台服务器。使用 SHOW DATABASE <database> 了解哪些服务器托管要备份的数据库。有关更多信息,请参阅 列出单个数据库

但是,恢复集群中的数据库是不同的,因为事先不知道如何将数据库分配到集群中的服务器。此方法依赖于种子已经存在于其中一台服务器上。在集群中恢复数据库的推荐方法是通过 从 URI 播种

Neo4j 管理命令 backuprestoredumploadcopycheck-consistency 不支持在 复合数据库 上使用。它们必须直接在与该复合数据库关联的数据库上运行。

表 1. 下表描述了命令的功能和用法。
功能/用法 backup/restore dump/load copy

Neo4j 版本

企业版

所有

企业版

从在线 Neo4j DBMS 运行

从离线 Neo4j DBMS 运行

针对用户数据库运行

针对 system 数据库运行

针对复合数据库运行

执行完整备份

n/a

执行增量备份

n/a

应用于在线数据库

应用于离线数据库

restore

可以远程运行

backup

命令输入

database/archive (.backup)

database/archive (.dump)

database

命令输出

archive (.backup)/database

archive (.dump)/database

database; 无模式存储

清理数据库不一致

压缩数据存储

要备份的数据库

Neo4j DBMS 可以托管多个数据库。Neo4j 社区版和企业版都有一个默认的用户数据库,称为 neo4j,以及一个 system 数据库,其中包含配置,例如数据库的操作状态、安全配置、模式定义、登录凭据和角色。在企业版中,您还可以创建其他用户数据库。这些数据库中的每一个都独立于彼此进行备份。

将您的数据库(包括 system 数据库)的最新备份存储在安全的位置非常重要。

要备份的其他文件

以下文件必须与数据库分开备份

  • neo4j.conf 文件。如果您有集群部署,则应备份每个集群成员的配置文件。

  • 用于加密的所有文件,即私钥、公钥证书以及 trustedrevoked 目录的内容。这些文件的位置在 SSL 框架 中描述。如果您有集群,则应备份每个集群成员的这些文件。

  • 如果使用自定义插件,请确保将插件保存在安全的位置。

  • 如果使用 Bloom 或 GDS Enterprise,请备份这些产品的许可证密钥文件。

存储注意事项

对于任何备份,重要的是将您的数据存储在与生产系统分离的地方,那里没有共同的依赖关系,最好是异地存储。如果您在云中运行 Neo4j,您可以使用不同的可用区,甚至可以从不同的云提供商使用。由于备份会保留很长时间,因此应在备份规划中考虑存档存储的寿命。