创建、启动和停止数据库

Neo4j 支持在同一个 DBMS 中管理多个数据库。这些数据库的元数据,包括相关的安全模型,都保存在一个名为 system 的特殊数据库中。所有多数据库管理命令都必须针对 system 数据库运行。当通过 Bolt 连接到 DBMS 时,这些管理命令会自动路由到 system 数据库。

在滚动升级期间不应使用管理命令。有关更多信息,请参阅 升级和迁移指南 → 升级集群

创建数据库

您可以使用 Cypher 命令 CREATE DATABASE 创建数据库。

数据库名称受 数据库名称 部分中指定的规则约束。不建议在数据库名称中使用点号 (.)。这是因为很难确定点号是数据库名称的一部分,还是复合数据库中数据库别名的分隔符。

block 是所有新创建数据库的默认格式,前提是它们没有指定 db.format 设置。
如果您想更改它,可以在 neo4j.conf 文件中为 db.format 配置设置新值。
或者,您可以使用 CREATE DATABASE databasename OPTIONS {storeFormat: 'the-new-format'} 命令设置新数据库的存储格式。但是,如果存储通过 seedURIexistingDataSeedServerexistingDataSeedInstance 进行种子设定,或者该命令用于挂载磁盘上已存在的预先存在的存储文件,则它们将使用其当前的存储格式,而无需进行任何更改。

有关 Neo4j 中可用数据库存储格式的更多详细信息,请参阅 存储格式

语法

命令 语法

CREATE DATABASE

CREATE DATABASE name [IF NOT EXISTS]
[TOPOLOGY n PRIMAR{Y|IES} [m SECONDAR{Y|IES}]]
[OPTIONS "{" option: value[, ...] "}"]
[WAIT [n [SEC[OND[S]]]]|NOWAIT]
CREATE OR REPLACE DATABASE name
[TOPOLOGY n PRIMAR{Y|IES} [m SECONDAR{Y|IES}]]
[OPTIONS "{" option: value[, ...] "}"]
[WAIT [n [SEC[OND[S]]]]|NOWAIT]

选项

CREATE DATABASE 命令可以带有一组选项映射,例如 OPTIONS {key: 'value'}

描述

existingData

use

控制系统在创建数据库时如何处理磁盘上的现有数据。目前,这仅支持 existingDataSeedInstanceexistingDataSeedServerseedURI,并且必须设置为 use,这表示应将现有数据文件用于新数据库。

existingDataSeedServer

existingDataSeedInstance 在 5.25 中已弃用

集群服务器 ID

定义用于为所创建数据库播种数据的服务器。运行 SHOW SERVERS 后,可在 serverId 列中找到服务器 ID。已由 existingDataSeedServer 替代。

seedURI

现有数据库的备份或转储的 URI。

定义一个来自外部源的相同种子,该种子将用于为所有服务器播种。有关更多信息,请参阅 从 URI 播种

seedConfig

逗号分隔的配置值列表。

seedCredentials 在 5.26 中已弃用

凭据

定义需要传递给某些种子提供程序的凭据。建议使用 CloudSeedProvider 种子提供程序,从云存储播种时不需要此配置。有关更多信息,请参阅 CloudSeedProvider

txLogEnrichment

FULL | DIFF | OFF

定义为变更数据捕获 (CDC) 目的应用于事务日志的丰富级别。

有关丰富模式的详细信息,请参阅 变更数据捕获手册 → 在自管理实例上启用 CDC → 设置丰富模式

storeFormat

aligned | standard | high_limit | block

定义新创建数据库的存储格式。high_limitstandard 格式自 5.23 版本起已弃用。有关存储格式的更多信息,请参阅 存储格式

如果存储通过 seedURIexistingDataSeedInstanceexistingDataSeedServer 进行种子设定,或者该命令用于挂载磁盘上已存在的预先存在的存储文件,则它们将保持其当前存储格式,而无需进行任何修改。

从 Neo4j 2025.01 开始,您可以将 existingDataseedURIseedConfigseedCredentials 选项与 CREATE OR REPLACE DATABASE 命令一起使用。

existingDataSeedInstanceexistingDataSeedServer 仍不支持与 CREATE OR REPLACE DATABASE 命令一起使用。有关播种选项的更多详细信息,请参阅 为集群播种

示例

创建数据库

要创建名为 customers 的数据库,请使用命令 CREATE DATABASE,后跟此数据库的名称。

CREATE DATABASE customers

创建数据库后,它会显示在 SHOW DATABASES 命令提供的列表中。

SHOW DATABASES YIELD name
结果
+-------------+
| name        |
+-------------+
| "customers" |
| "movies"    |
| "neo4j"     |
| "system"    |
+-------------+

使用 WAIT 创建数据库

子句 WAIT 允许您指定命令必须完成并返回的时间限制。

CREATE DATABASE slow WAIT 5 SECONDS
结果
+-------------------------------------------------------+
| address          | state      | message     | success |
+-------------------------------------------------------+
| "localhost:7687" | "CaughtUp" | "caught up" | TRUE    |
+-------------------------------------------------------+

success 列提供了命令是否成功聚合状态。因此,每一行都具有相同的值,该值在成功完成且未超时时确定。

使用 IF NOT EXISTSOR REPLACE 创建数据库

CREATE DATABASE 命令是可选的幂等命令,其默认行为是如果数据库已存在,则会报错失败。有两种方法可以规避此行为。

首先,在命令后附加 IF NOT EXISTS 可确保不返回错误,并且如果数据库已存在,则不会发生任何事情。

CREATE DATABASE customers IF NOT EXISTS

其次,在命令中添加 OR REPLACE 会删除任何现有数据库并创建一个新数据库。

CREATE OR REPLACE DATABASE customers

这相当于运行 DROP DATABASE customers IF EXISTS 后跟 CREATE DATABASE customers

请记住,使用 CREATE OR REPLACE DATABASE 还会删除索引和约束。为了保留它们,请在 CREATE OR REPLACE DATABASE 之前运行以下 Cypher 命令并保存其输出。

SHOW CONSTRAINTS YIELD createStatement AS statement
SHOW INDEXES YIELD createStatement, owningConstraint
WHERE owningConstraint IS NULL
RETURN createStatement AS statement

IF NOT EXISTSOR REPLACE 的行为适用于标准数据库和复合数据库(例如,复合数据库可以替换标准数据库或另一个复合数据库)。

这些命令的 IF NOT EXISTSOR REPLACE 部分不能一起使用。

启动数据库

数据库可以使用命令 START DATABASE 启动。

标准数据库和复合数据库都可以使用此命令启动。

语法

命令 语法

START DATABASE

START DATABASE name [WAIT [n [SEC[OND[S]]]]|NOWAIT]

示例

启动数据库

启动数据库是一个简单的操作。假设您有一个名为 customers 的数据库。要启动它,请使用以下命令:

START DATABASE customers

您可以通过运行 SHOW DATABASE name 命令查看已启动数据库的状态。

SHOW DATABASE customers YIELD name, requestedStatus, currentStatus
结果
+-----------------------------------------------+
| name        | requestedStatus | currentStatus |
+-----------------------------------------------+
| "customers" | "online"        | "online"      |
+-----------------------------------------------+

使用 WAIT 启动数据库

您可以使用 WAIT 子句启动数据库,以确保命令等待指定时间直到数据库启动。

START DATABASE customers WAIT 5 SECONDS

停止数据库

数据库可以使用命令 STOP DATABASE 停止。

语法

命令 语法

STOP DATABASE

STOP DATABASE name [WAIT [n [SEC[OND[S]]]]|NOWAIT]

示例

停止数据库

要停止数据库,请使用以下命令:

STOP DATABASE customers

标准数据库和复合数据库都可以使用此命令停止。

可以使用命令 SHOW DATABASE name 查看已停止数据库的状态。

SHOW DATABASE customers YIELD name, requestedStatus, currentStatus
结果
+-----------------------------------------------+
| name        | requestedStatus | currentStatus |
+-----------------------------------------------+
| "customers" | "offline"       | "offline"     |
+-----------------------------------------------+

使用 WAIT 停止数据库

您也可以使用 WAIT 子句停止数据库,该子句允许您指定系统应等待数据库停止的时间量。

STOP DATABASE customers WAIT 10 SECONDS

使用 STOP 命令停止的数据库会完全关闭,并且可以通过 START 命令再次启动。在集群中,只要数据库处于关闭状态,它就不能被视为对集群的其他成员可用。无法对已关闭的数据库进行在线备份,并且在灾难恢复期间需要特别考虑它们,因为它们在关闭时没有运行 Raft 机器。与停止的数据库不同,删除的数据库会被完全移除,并且根本不打算再次使用。

© . All rights reserved.