教程:在单个实例中备份和还原单个数据库
本教程提供了一个详细的示例,说明如何备份和还原数据库(在本例中为版本 3.5),将其还原到正在运行的(已升级/迁移)4.x 独立实例中。
以下示例假设您的数据库具有与其关联的用户和角色,并描述如何备份、迁移,然后在正在运行的独立实例上还原它。
准备备份数据库
在执行备份之前,最好记下要还原的数据库的数据和元数据。您可以稍后使用此信息来验证还原是否成功,以及重新创建数据库用户和角色。在本例中,数据库使用 Neo4j 浏览器 → 收藏夹 → 示例图中的电影图数据集。
-
在运行数据库的 3.5 Neo4j 实例中,导航到 * /bin* 文件夹,并使用您的凭据登录到 Cypher® Shell 命令行控制台。有关 Cypher Shell 命令行界面 (CLI) 的更多信息以及如何使用它,请参见 操作手册 → Cypher Shell。
./cypher-shell -u neo4j -p <password>
Connected to Neo4j at neo4j://localhost:7687 as user neo4j. Type :help for a list of available commands or :exit to exit the shell. Note that Cypher queries must end with a semicolon.
-
运行查询以计算数据库中节点的数量。
MATCH (n) RETURN count(n) AS countNode;
+-----------+ | countNode | +-----------+ | 171 | +-----------+ 1 row available after 22 ms, consumed after another 1 ms
-
运行查询以计算关系的数量。
MATCH (n)-[r]->() RETURN count(r) AS countRelationships;
+--------------------+ | countRelationships | +--------------------+ | 253 | +--------------------+ 1 row available after 29 ms, consumed after another 0 ms
-
运行以下两个查询以查看是否定义了模式。
CALL db.constraints()
0 rows available after 2 ms, consumed after another 0 ms
结果显示未定义任何约束。
CALL db.indexes;
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | description | indexName | tokenNames | properties | state | type | progress | provider | id | failureMessage | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | "INDEX ON :Movie(title)" | "index_1" | ["Movie"] | ["title"] | "ONLINE" | "node_label_property" | 100.0 | {version: "1.0", key: "native-btree"} | 1 | "" | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
结果显示在 `:Movie` 节点的 `title` 属性上定义了一个索引。
-
运行查询以列出与该数据库关联的所有用户及其角色。
CALL dbms.security.listUsers;
+-----------------------------------------+ | username | roles | flags | +-----------------------------------------+ | "user1" | ["editor", "reader"] | [] | | "neo4j" | ["admin"] | [] | +-----------------------------------------+ 2 rows available after 2 ms, consumed after another 0 ms
结果显示两个用户 - 默认的 `neo4j` 用户,它具有 `admin` 权限,以及一个自定义用户 `user1`,它具有内置角色 `editor` 和 `reader` 的组合权限。
-
退出 Cypher Shell 命令行控制台。
:exit; Bye!
备份数据库
现在您已准备好备份数据库。
导航到 * /bin* 文件夹,并运行以下命令以将数据库备份到目标文件夹中。如果您要放置备份的文件夹不存在,则必须创建它。在本例中,它称为 * /tmp/3.5.24*。
./neo4j-admin backup --backup-dir=/tmp/3.5.24 --name=graphdbbackup
有关执行备份以及不同命令选项的详细信息,请参见 操作手册 3.5 → 执行备份。
在 4.x 独立实例上还原数据库备份
您有一个正在运行的 Neo4j 4.x 实例,并且您想要在其中还原备份的数据库。
-
在 4.x 独立实例的 *neo4j.conf* 文件中,设置 `dbms.allow_upgrade=true`。
如果您的 Neo4j 独立实例的版本早于 4.1,则您必须重新启动它才能使配置生效。
-
导航到 * /bin* 文件夹,并运行以下命令以还原数据库备份。
./neo4j-admin restore --from=/tmp/3.5.24/graphdbbackup --database=graphdbbackup
-
运行以下命令以验证数据库 `graphdbbackup` 是否存在
ls -al ../data/databases
total 0 drwxr-xr-x@ 6 username staff 192 4 Dec 14:15 . drwxr-xr-x@ 5 username staff 160 7 Dec 09:35 .. drwxr-xr-x 42 username staff 1344 4 Dec 14:15 graphdbbackup drwxr-xr-x 37 username staff 1184 4 Dec 14:06 neo4j -rw-r--r-- 1 username staff 0 4 Dec 14:06 store_lock drwxr-xr-x 38 username staff 1216 4 Dec 14:06 system
但是,还原数据库不会自动创建它。因此,如果您在 Cypher Shell 或 Neo4j 浏览器中执行 `SHOW DATABASES`,则它将不可见。
-
登录到 Cypher Shell 命令行控制台。
-
将活动数据库更改为 `system` (` :USE system; `),然后创建 `graphdbbackup` 数据库。
CREATE DATABASE graphdbbackup;
0 rows available after 145 ms, consumed after another 0 ms
-
验证 `graphdbbackup` 数据库是否联机。
SHOW DATABASES;
+-------------------------------------------------------------------------------------------------------+ | name | address | role | requestedStatus | currentStatus | error | default | +-------------------------------------------------------------------------------------------------------+ | "graphdbbackup" | "localhost:7687" | "standalone" | "online" | "online" | "" | FALSE | | "neo4j" | "localhost:7687" | "standalone" | "online" | "online" | "" | TRUE | | "system" | "localhost:7687" | "standalone" | "online" | "online" | "" | FALSE | +-------------------------------------------------------------------------------------------------------+ 3 rows available after 175 ms, consumed after another 9 ms
-
将活动数据库更改为 `graphdbbackup`,并重复 准备备份数据库 部分中的步骤 2、3 和 4,以验证所有数据是否已成功还原。
重新创建数据库用户和角色
您需要使用 准备备份数据库 部分步骤 5 中的笔记和 Cypher 手册 → Cypher 管理命令 手动重新创建还原的数据库的所有用户和角色。
-
创建用户 `user1`。
CREATE USER user1 IF NOT EXISTS SET PASSWORD 'password' SET STATUS ACTIVE;
-
将角色 `reader` 授予用户 `user1`。
GRANT ROLE reader TO user1;
-
将角色 `editor` 授予用户 `user1`。
GRANT ROLE editor TO user1;
-
验证用户 `user1` 是否具有与数据库备份中相同的角色。
SHOW USERS;
+---------------------------------------------------------------------+ | user | roles | passwordChangeRequired | suspended | +---------------------------------------------------------------------+ | "neo4j" | ["admin"] | FALSE | FALSE | | "user1" | ["editor", "reader"] | TRUE | FALSE | +---------------------------------------------------------------------+