教程:备份和还原集群中的单个数据库企业版
本教程提供了有关如何在运行中(已升级/迁移)的 4.x 集群中备份和还原数据库(本例为 3.5 版本)的详细示例。
以下示例假设您的数据库关联了用户和角色,并介绍了如何备份它、将其迁移到独立实例中,然后再将其还原到运行中的集群中。有关如何设置集群的更多信息,请参阅 操作手册 → 设置本地集群。
|
在 Neo4j DBMS 中,每个数据库都是单独备份的。因此,为每个数据库规划备份策略非常重要。有关如何为您的设置设计合适的备份策略的详细信息,请参阅 操作手册 3.5 → 备份。 |
准备备份数据库
在执行备份之前,最好记录下您要还原的数据库的数据和元数据。稍后您可以使用这些信息来验证还原是否成功,并重新创建数据库用户和角色。在此示例中,数据库使用的是 Neo4j Browser → Favorites → Example Graphs 中的 Movie Graph 数据集。
-
在运行数据库的 3.5 Neo4j 实例中,导航到 /bin 文件夹,并使用您的凭据登录 Cypher® Shell 命令行控制台。有关 Cypher Shell 命令行界面 (CLI) 及其使用方法的更多信息,请参阅 操作手册 → Cypher Shell。
./cypher-shell -u neo4j -p <password>Connected to Neo4j at neo4j://: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
-
运行以下两个查询以查看是否定义了模式 (schema)。
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 实例,并使用 neo4j-admin restore 命令。
|
必须以 如果备份数据库时禁用了 |
-
在 4.x 独立实例的 neo4j.conf 文件中,设置
dbms.allow_upgrade=true。 -
启动服务器。
-
导航到 /bin 文件夹,并运行以下命令以还原数据库备份。
./neo4j-admin restore --from=/tmp/3.5.24/graphdbbackup --database=graphdbbackup -
运行以下命令以验证
graphdbbackup数据库是否存在ls -al ../data/databasestotal 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 Browser 中执行
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 步,以验证所有数据是否已成功还原。
备份已迁移的数据库
要将迁移后的数据库还原到您的集群中,请为其创建一个备份。
导航到 /bin 文件夹,并运行以下命令将数据库备份到目标文件夹。如果您想要放置备份的文件夹不存在,则必须先创建它。在此示例中,该文件夹名为 /tmp/4.0.11。
./neo4j-admin backup --backup-dir=/tmp/4.0.11 --database=graphdbbackup
有关执行备份和不同命令选项的详细信息,请参阅 操作手册 → 备份在线数据库。
现在,您可以将迁移后的数据库备份还原到运行中的集群中了。
在所有集群成员上还原迁移后的数据库
在每个集群成员上,导航到 /bin 文件夹,并运行以下命令以还原迁移后数据库的备份。有关执行还原和不同命令选项的详细信息,请参阅 操作手册 → 还原命令。
./neo4j-admin restore --from=/tmp/4.0.11/graphdbbackup --database=graphdbbackup
然后,在每个集群成员上,运行以下命令以验证 graphdbbackup 数据库是否存在
ls -al ../data/databases
total 0 drwxr-xr-x@ 6 username staff 192 7 Dec 09:41 . drwxr-xr-x@ 5 username staff 160 4 Dec 14:17 .. drwxr-xr-x 38 username staff 1216 7 Dec 09:41 graphdbbackup drwxr-xr-x 37 username staff 1184 7 Dec 08:57 neo4j -rw-r--r-- 1 username staff 0 4 Dec 14:17 store_lock drwxr-xr-x 38 username staff 1216 7 Dec 08:56 system
在集群领导者上创建数据库备份
您可以使用 CREATE DATABASE 命令仅在其中一个集群成员上创建数据库备份。该命令会自动路由到领导者,并从那里路由到其他集群成员。
-
在其中一个集群成员的 Cypher Shell 命令行控制台中,使用
system数据库并创建graphdbbackup数据库。CREATE DATABASE graphdbbackup;0 rows available after 132 ms, consumed after another 0 ms
-
验证
graphdbbackup数据库在所有成员上是否都处于在线状态。SHOW DATABASES;+-----------------------------------------------------------------------------------------------------+ | name | address | role | requestedStatus | currentStatus | error | default | +-----------------------------------------------------------------------------------------------------+ | "graphdbbackup" | "localhost:7689" | "follower" | "online" | "online" | "" | FALSE | | "graphdbbackup" | "localhost:7688" | "leader" | "online" | "online" | "" | FALSE | | "graphdbbackup" | "localhost:7687" | "follower" | "online" | "online" | "" | FALSE | | "neo4j" | "localhost:7689" | "leader" | "online" | "online" | "" | TRUE | | "neo4j" | "localhost:7688" | "follower" | "online" | "online" | "" | TRUE | | "neo4j" | "localhost:7687" | "follower" | "online" | "online" | "" | TRUE | | "system" | "localhost:7689" | "leader" | "online" | "online" | "" | FALSE | | "system" | "localhost:7688" | "follower" | "online" | "online" | "" | FALSE | | "system" | "localhost:7687" | "follower" | "online" | "online" | "" | FALSE | +-----------------------------------------------------------------------------------------------------+
-
将您的活动数据库更改为
graphdbbackup,并完成“准备备份数据库”一节中的第 2、3 和 4 步,以验证所有数据是否已成功还原。
重新创建数据库用户和角色
在所有集群成员上,使用您在“准备备份数据库”一节第 5 步中的记录,并参考 Cypher 手册 → Cypher 管理命令,手动重新创建还原数据库的所有用户和角色。
system 数据库运行以下命令,以重新创建 graphdbbackup 数据库的自定义用户和角色。
-
创建用户
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 | +---------------------------------------------------------------------+