迁移数据库

以下步骤假设:

  • 您已为所有想要迁移的 Neo4j 4.4 数据库创建了备份。

  • 您已安装了用于接收数据库的等效 Neo4j 5 DBMS。

切换到 Neo4j 5

如果您的安装方式(例如 tarball 或 docker)允许您在同一台服务器上同时运行 Neo4j 4.4 和 5,则现在可以关闭 Neo4j 4.4 进程。或者,您也可以选择让它继续运行,并将所有数据库设置为只读模式,直到迁移完成。

如果您确实选择同时运行两个 Neo4j 安装实例,请确保服务器有足够的资源来支持,并且两个安装实例的配置不会冲突(例如端口冲突)。

从现在开始,您将使用 Neo4j 5 DBMS。如果两个版本位于同一台机器上,您可能需要将默认 Java 运行时更改为 Java 17。从 5.14 版本开始,Neo4j 也支持 Java 21。

Neo4j Database 5.26 LTS 是最后一个使用 Java SE 17 平台的版本。建议迁移至 Java SE 21,该版本从 Neo4j Database 5.14 开始提供支持。

确保 Neo4j 5 中尚未托管与您要迁移的数据库同名的任何数据库(忽略 system 数据库)。

在 Neo4j 5 上恢复数据库

您现在可以将数据库备份恢复到 Neo4j 5。

如果您要迁移到集群,请仅将其恢复到一台服务器;稍后您将使用此服务器作为种子来配置其他服务器。

如果您要从 Neo4j 4.4 社区版 (Community Edition) 安装中迁移数据库,则需要使用 neo4j-admin database load 命令来加载您的转储文件。

更多信息,请参阅 Operations Manual 5 → 恢复数据库转储

  1. 使用 neo4j-admin restore 命令恢复您的每个数据库(system 数据库除外)。

    /usr/bin/neo4j-admin database restore <databasename> --from-path=/migration-backups/<databasename>
  2. 使用 neo4j-admin database migrate 命令将文件元数据更新为 5 格式。

    /usr/bin/neo4j-admin database migrate <databasename>

如果您没有为每个 BTREE 索引和索引支持的约束创建 RANGE、POINT 或 TEXT 索引,该命令将会失败。您可以使用 --force-btree-indexes-to-range 选项强制 neo4j-admin database migrate 删除 BTREE 索引并将其替换为 RANGE 索引。建议阅读 准备迁移 中关于准备索引的部分,以了解其后果。

如果您还想在迁移到 5.x 时压缩数据库,可以使用 store copy 作为在 4.4 和 5.x 之间迁移数据库的替代方案。

更多信息,请参阅 Operations Manual 5 → 复制数据库存储

重新创建数据库

启动 Neo4j 5 并使用以下 Cypher® 语句重新创建您的每个数据库:

CREATE DATABASE <databasename>
  1. 启动 Neo4j 5 并通过运行以下命令获取您恢复备份所在服务器的服务器 ID:

    SHOW SERVERS YIELD address, serverId

    在 Neo4j 5 集群上创建数据库时,您可以选择使用 TOPOLOGY 参数来指定所需的成员(primary)和副本(secondary)数量。这些值稍后可以使用 ALTER DATABASE 进行更改。

    更多信息,请参阅 Operations Manual 5 → 创建数据库

  2. 使用以下 Cypher 重新创建您的每个数据库:

    CREATE DATABASE <databasename>
    TOPOLOGY [desired number of primaries] PRIMARIES [desired number of secondaries] SECONDARIES
    OPTIONS {existingData: 'use', existingDataSeedInstance: '[ServerId for a]'}
  3. (可选)每个 CREATE DATABASE 都会分配数据库,但这可能会导致分布不均衡。您可以运行 REALLOCATE DATABASES 让集群在集群内的所有服务器之间重新平衡数据库。

    REALLOCATE DATABASES

    更多信息,请参阅 Operations Manual 5 → 重新分配数据库

重新创建数据库别名

如果您正在使用数据库别名,则必须手动重新创建它们。有关别名的更多信息,请参阅 Operations Manual → 管理标准数据库的数据库别名

恢复角色和权限

您可以使用在 创建每个数据库的备份 一节中备份数据库时生成的元数据脚本,来恢复与每个数据库关联的角色和权限。元数据脚本位于 _migration-backups/<databasname>/tools/metadata_script.cypher_。使用 Cypher Shell 运行相应的元数据脚本:

使用 cat (UNIX)

cat migration-backups/data/databases/databasename/tools/metadata_script.cypher | bin/cypher-shell -u user -p password -a ip_address:port -d system --param "database => '<databasename>'"

使用 type (Windows)

type migration-backups/data/databases/databasename/tools/metadata_script.cypher | bin\cypher-shell.bat -u user -p password -a ip_address:port -d system --param "database => '<databasename>'"

如果您在创建备份时未使用 --include-metadata=all 选项,则需要手动重新创建角色和权限。更多信息,请参阅 Operations Manual 5 → 管理角色Operations Manual 5 → 内置角色和权限

监控日志

当 Neo4j 启动时,监控日志以查看迁移引起的任何错误或警告非常有用。您可以在 neo4j.log 文件中找到有关升级的信息。

© . This site is unofficial and not affiliated with Neo4j, Inc.