重新创建数据库企业版Aura 不可用
重建过程
重建过程允许您执行以下操作:
-
将数据库存储更改为指定的备份,同时保留该数据库的所有关联权限。
-
在数据库丢失(例如,由于灾难)后,使其重新变为可写状态。更多信息,请参阅 灾难恢复。
-
2025.02 引入 删除数据库的数据和模式,同时保留分配给每个角色的数据库权限。
-
2025.04 引入 在清除数据和模式时更改数据库存储格式。
|
重建过程仅适用于真实的用户数据库,不适用于复合数据库或 请记住,重建过程会导致存储更新期间出现停机。停机时间是不确定的,可能取决于多种因素,例如存储大小、网络速度等。 |
在 Neo4j 2025.04 中,dbms.cluster.recreateDatabase() 过程已被弃用,建议改用 dbms.recreateDatabase()。
语法
dbms.recreateDatabase(database :: STRING, options = {} :: MAP)
输入参数包括数据库名称以及用于重建数据库的种子设定(seeding)和拓扑选项。
| 选项 | 描述 |
|---|---|
seedingServers |
候选种子服务器列表。您可以定义可用服务器或提供空列表。详细信息请参阅 使用可用服务器作为种子。 |
seedURI |
通过 URI 指定的外部源。 |
clearData 2025.02 引入 |
允许您删除数据库的数据和模式,同时保留分配给每个角色的数据库权限。 |
storeFormat 2025.04 引入 |
允许您在清除数据和模式时更改数据库存储格式。 |
primaries |
重建数据库的主副本分配数量。如果您设置了主副本数量而未设置从副本,则从副本数被设置为 |
secondaries |
重建数据库的从副本分配数量。如果不设置主副本,则无法设置从副本。 |
先决条件与注意事项
重建时,相关数据库可以处于 online(在线)或 offline(离线)状态,但无论其先前状态如何,成功执行操作后数据库都将启动。
如果您的数据库启用了变更数据捕获 (CDC),则在重建数据库时 CDC 链将停止,即使在重建后的数据库中 CDC 仍然保持启用状态。要恢复 CDC 功能,请遵循关于如何从现有数据库初始化 CDC 应用程序的指南。
在重建数据库之前,需要先处理任何已隔离的状态。更多信息,请参阅 标准数据库 → 错误处理。
运行重建过程需要具备 CREATE DATABASE 和 DROP DATABASE 权限。
此外,在集群部署中,您可以选择在重建过程中修改拓扑结构。
但是请注意,存储格式(在 Neo4j 2025.04 之前)、访问权限和富集(enrichment)无法在重建期间更改。从 2025.04 版本开始,仅当使用 clearData 选项时才能更改存储格式。
要检查重建是否成功,请使用 SHOW DATABASES 命令并验证所有分配项是否已启动。
种子设定选项
数据库重建期间使用的存储可以通过多种方式定义。一种方法是使用备份,其他方法则使用集群中的可用分配。
您可以使用 seedURI 或 seedingServers 来指定从中重建数据库的源。
-
如果您两者都不定义,则会抛出错误。
-
如果您同时定义了两者,则
seedingServers必须为空列表。更多细节请参阅 带备份回退的未定义服务器。 -
如果
seedingServers不为空且同时定义了seedURI,将会发生错误。
使用备份作为种子
如果您提供备份或转储的 URI,所有分配上的存储将被该 URI 处的备份或转储替换。新的分配可以放置在集群中任何 ENABLED(已启用)的服务器上。更多细节请参阅 从 URI 播种。
CALL dbms.recreateDatabase("neo4j", {seedURI: "s3://myBucket/myBackup.backup"});
使用可用服务器作为种子
重建完成后,数据库将拥有来自种子服务器的最新数据存储。
|
重建基于剩余的可用存储或用户明确指定的特定存储。丢失或未明确指定的存储将被排除在重建过程之外。因此,如果被排除的存储中包含比所用存储更新的数据,则可能会发生数据丢失。 |
- 指定服务器
-
您可以指定一组可用服务器。所有分配上的存储将同步为定义服务器中最新的存储。所定义服务器的数量不能超过目标拓扑中的总分配数量。
CALL dbms.recreateDatabase("neo4j", {seedingServers: ["serverId1", "serverId2", "serverId3"]});
- 未定义服务器
-
如果您提供了一个空的种子服务器列表且未指定
seedURI,Neo4j 将选择当前已启用且未被隔离 (non-cordoned) 的服务器上该数据库的所有分配(主副本和从副本)作为种子来源。在运行该过程之前,请确保所有不可用的服务器都已隔离 (cordoned);否则该过程将失败。
要确定数据库的分配位置,请使用
SHOW DATABASES命令。要识别托管所需数据库的所有已启用且可用的服务器,请运行SHOW SERVERS命令。服务器必须显示health = Available且status = Enabled。通过运行dbms.cluster.cordonServer()过程来隔离所有无法访问的服务器。然后,Neo4j 将选择集群中可用的最新种子来源来重建数据库。
CALL dbms.recreateDatabase("neo4j", {seedingServers: []});
- 带备份回退的未定义服务器
-
如果既提供了空的种子服务器列表,又提供了
seedURI,Neo4j 会找到数据库的所有分配并将其用作种子来源。不可用的服务器必须先进行隔离。但是,如果找不到可用的服务器,则会根据 URI 指定的备份或转储来重建数据库。这意味着,如果存在最新的种子来源,则存储会被其替换;否则,将使用备份。
CALL dbms.recreateDatabase("neo4j", {seedingServers: [], seedURI: "s3://myBucket/myBackup.backup"});
更改拓扑
在集群部署中,重建数据库时可以选择定义新的拓扑结构。这在灾难期间非常有用,例如当没有足够的服务器以原始拓扑重建数据库时。在重建期间缩减分配总数时,请务必记住:种子服务器的数量不能超过数据库的总分配数量。在使用空种子列表进行重建时也适用此规则。如果集群中托管该数据库的可用服务器数量多于新分配数量,则重建将失败。
CALL dbms.recreateDatabase("neo4j", {seedingServers: [], primaries: 3, secondaries: 0});
清除数据选项2025.02 引入
在 Neo4j 2025.02 中,clearData 选项被添加到重建过程中。该选项允许您删除数据库的数据(例如节点和关系)以及模式(例如约束和索引)。这意味着您将得到一个空的存储,但与其他数据库重建选项一样,所有与该数据库关联的权限都会被保留。
|
使用清除数据选项意味着数据和模式将被永久删除。如果您希望将来有可能恢复它们,请确保在清除数据库之前进行备份。更多信息请参阅 在线备份。 |
更改数据库存储格式2025.04 中引入
在 Neo4j 2025.04 中,数据库存储格式也可以在重建期间更改,但仅当指定了 clearData 选项时才行。
有关 Neo4j 中可用数据库存储格式的更多详细信息,请参阅 存储格式。如果未定义存储格式选项,重建后的数据库将使用与重建前相同的存储格式。
CALL dbms.recreateDatabase("neo4j", {clearData: true, storeFormat: "block"});