备份与恢复规划
对 Neo4j 数据库进行备份并将其存储在安全的异地位置,主要有两个原因:
-
为了能够在发生故障(例如与硬件、人为错误或自然灾害相关的问题)时快速恢复数据。
-
为了能够执行日常管理操作,例如将数据库从一个实例迁移到另一个实例、升级或回收磁盘空间。
备份与恢复策略
根据您的具体部署和环境,设计适当的备份与恢复策略至关重要。
在决定策略时,需要考虑多种因素,例如:
-
环境类型——开发、测试或生产环境。
-
数据量。
-
数据库数量。
-
可用系统资源。
-
备份和恢复期间的停机容忍度。
-
备份和恢复期间对 Neo4j 性能的要求。此因素可能会促使您选择在非高峰时段执行这些操作。
-
发生故障时的数据丢失容忍度。
-
发生故障时的停机容忍度。如果您对停机和数据丢失的容忍度为零,则可能需要考虑执行在线备份甚至定时备份。
-
数据库更新的频率。
-
备份与恢复方法的类型(在线或离线),这可能取决于您是否希望:
-
执行全量备份(在线或离线)。
-
执行增量备份(仅限在线)。
-
在备份网络通信中使用 SSL/TLS(仅限在线)。
-
将数据库保留为归档文件(在线或离线)。
-
-
您希望保留的备份数量。
-
备份的存储位置——驱动器或远程服务器、云存储、不同的数据中心、不同的地理位置等。
在运行备份或 dump 命令之前,请验证目标目录权限。备份目录绝对不能是全员可读或全员可执行的。即使内部的单个备份文件受到限制,全员可执行的目录仍然可能泄露敏感信息。
有关详细信息和说明,请参考 安全注意事项。
建议将数据库备份存储在与数据库文件不同的异地服务器(驱动器或远程)上。这可以确保即使 Neo4j DBMS 因故崩溃,您仍然能够访问备份并执行恢复。
-
您将如何测试恢复程序,以及测试频率。
备份与恢复选项
Neo4j 支持对在线和离线数据库进行备份与恢复。它使用 Neo4j Admin 工具 命令,无论 Neo4j DBMS 是在运行中还是离线,都可以执行这些命令。所有 neo4j-admin 命令必须以 neo4j 用户身份调用,以确保正确的文件权限。
-
neo4j-admin database backup/restore企业版 (Enterprise Edition) —— 用于执行在线备份(全量和增量)及恢复操作。-
要备份的数据库必须处于在线 (online) 模式。
-
该命令生成一个不可变的工件,并具有可供检查的 API,以辅助管理和运维。
-
此命令适用于无法承受停机的生产环境。
-
如果使用
server.backup.listen_address启用了访问权限,该命令也可以通过网络调用。请务必将备份服务器端口的访问权限限制为完全受信任的特定设备。应考虑防火墙策略。有关更多信息,请参阅 服务器配置部分。
在集群中使用
neo4j-admin database backup时,建议从外部实例进行备份,而不是复用集群中的成员实例。
-
-
neo4j-admin database dump/load—— 用于执行离线 dump 和 load 操作。-
要 dump 的数据库必须处于离线 (offline) 模式。
-
dump 命令只能从服务器命令行调用,适用于停机时间不是考量因素的环境。
-
该命令生成一个格式为 <数据库名><时间戳>.dump 的归档文件。
-
-
neo4j-admin database copy—— 用于复制离线数据库或备份。此命令可用于清理数据库不一致性并回收未使用的空间。
|
不支持直接在文件系统中通过复制粘贴数据库,否则可能导致异常行为,例如存储损坏。 |
下表总结了各命令的功能和用法。
| 功能/用法 | backup/restore |
dump/load |
copy |
|---|---|---|---|
Neo4j 版本 |
企业版 (Enterprise) |
all |
企业版 (Enterprise) |
在在线 Neo4j DBMS 上运行 |
仅限企业版 |
||
在离线 Neo4j DBMS 上运行 |
|||
针对用户数据库运行 |
|||
针对 |
|||
针对组合数据库 (Composite database) 运行 |
|||
执行全量备份 |
不适用 |
||
执行增量备份 |
不适用 |
||
应用于在线数据库 |
|||
应用于离线数据库 |
仅 |
||
可以远程运行 |
仅 |
||
命令输入 |
数据库/归档 (.backup) |
数据库/归档 (.dump) |
database |
命令输出 |
归档 (.backup)/数据库 |
归档 (.dump)/数据库 |
数据库;无模式存储 |
清理数据库不一致性 |
|||
压缩数据存储 |
|
Neo4j Admin 命令 |
集群中数据库备份与恢复的注意事项
在集群环境中备份数据库与独立实例备份并无本质区别,区别在于您必须知道连接集群中的哪台服务器。使用 SHOW DATABASE <数据库名> 查看哪些服务器正在托管您想要备份的数据库。有关更多信息,请参阅 列出单个数据库。
从 2025.09 版本开始,您可以使用 --remote-address-resolution 选项让 DBMS 选择将哪些服务器用作备份源。有关更多详细信息,请参阅 备份在线数据库 → 集群配置。
从命令行进行恢复需要在每台需要该数据库的服务器磁盘上放置一个数据库副本。这实现起来可能比较麻烦。在集群中恢复数据库的推荐方式是 从 URI 进行种子化 (seed)。
|
默认情况下,使用 恢复时,您可以灵活定义目标拓扑结构(数据库所需的 Primary 和 Secondary 节点数量),这可能与备份时的拓扑结构不同。数据库随后将根据该拓扑结构分配到可用的服务器上。 |
需要备份的数据库
一个 Neo4j DBMS 可以托管多个数据库。Neo4j 社区版和企业版都有一个名为 neo4j 的默认用户数据库和一个 system 数据库。system 数据库包含配置信息,例如数据库的运行状态、安全配置、模式定义、登录凭据和角色。
在企业版中,您还可以创建多个用户数据库。每个数据库都独立于其他数据库进行备份。
在安全位置存储数据库(包括 system 数据库)的最新备份非常重要。
需要备份的其他文件
以下文件必须与数据库分开备份:
-
neo4j.conf 文件。如果您有集群部署,则应备份每个集群成员的配置文件。
-
所有用于加密的文件,即私钥、公有证书,以及 trusted 和 revoked 目录的内容。这些文件的位置在 SSL 框架 中有描述。如果您有集群,则应备份每个集群成员的这些文件。
-
如果使用了自定义插件,请确保将插件存储在安全位置。
-
如果使用了 Bloom 或 GDS 企业版,请同时备份这些产品的许可证密钥文件。