创建、启动和停止数据库

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

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

创建数据库

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

数据库名称应遵守 数据库名称 部分中指定的规则。不建议在数据库名称中使用点 (.)。这是因为难以确定点是数据库名称的一部分还是复合数据库中数据库别名的分隔符。

在 Neo4j 5.22 之前的版本中,所有新数据库的默认存储格式为aligned。从 Neo4j 5.22 开始,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 5.25 中新增

existingDataSeedInstance 5.25 中已弃用

集群服务器的 ID

定义用于播种创建的数据库数据的服务器。服务器 ID 可以在运行SHOW SERVERS 后的serverId 列中找到。existingDataSeedInstance 在 Neo4j 5.25 中被existingDataSeedServer 替换。

seedURI

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

定义来自外部来源的相同种子,该种子将用于播种所有服务器。

seedConfig

以逗号分隔的配置值列表。

定义某些种子提供程序可能需要的其他配置,这些配置由以逗号分隔的name=value 对指定。

seedCredentials

凭据

定义需要传递给某些种子提供程序的凭据。

txLogEnrichment

FULL | DIFF | OFF

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

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

storeFormat

aligned | standard | high_limit | block

定义如果创建的数据库是新的,则定义存储格式。如果存储使用seedURIexistingDataSeedInstanceexistingDataSeedServer 播种,或者如果该命令用于挂载磁盘上已存在的存储文件,它们将保留其当前存储格式,不会进行任何修改。

existingDataexistingDataSeedInstanceexistingDataSeedServerseedURIseedConfigseedCredentials 选项不能与该命令的OR REPLACE 部分结合使用。有关播种选项的更多详细信息,请参见 播种集群

示例

创建数据库

要创建一个名为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

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 机器。与停止的数据库不同,已删除的数据库将完全删除,并且不打算再次使用。