恢复数据库转储

neo4j-admin database load 命令可用于加载通过 neo4j-admin database dump 命令创建的归档文件,或加载由 Neo4j Enterprise 的 neo4j-admin database backup 命令创建的完整备份制品。

如果您要替换现有的数据库,则必须在运行该命令之前将其关闭,并使用 --overwrite-destination 选项。
企业版 如果您不是要替换现有数据库,则必须在加载操作完成后创建该数据库(通过针对 system 数据库运行 CREATE DATABASE)。

在企业版中,该命令可以在联机或脱机 Neo4j DBMS 上运行。在社区版中,该命令只能在脱机的 Neo4j DBMS 上运行。必须以 neo4j 用户身份执行该命令,以确保具备适当的文件权限。

变更数据捕获 (Change Data Capture) 不会捕获由使用 neo4j-admin database load 产生的任何数据变更。更多信息请参阅 变更数据捕获 → 关键注意事项

语法

neo4j-admin database load [-h] [--expand-commands] [--info] [--verbose] [--overwrite-destination[=true|false]]
                          [--additional-config=<file>] [--from-path=<path> | --from-stdin] <database>

描述

从归档文件加载数据库。<archive-path> 必须是包含归档文件的目录。归档文件可以是使用 dump 命令创建的数据库转储,也可以是 Neo4j Enterprise 的 backup 命令创建的完整备份制品。如果未提供 --from-path--from-stdin,则会在 server.directories.dumps.root 设置的路径中搜索归档文件。可以通过指定 --overwrite-destination 来替换现有数据库。无法替换挂载在运行中的 Neo4j 服务器上的数据库。如果指定了 --info,则不会加载数据库,而是会打印有关归档的信息(即文件数量、字节数和加载文件的格式)。

参数

表 1. neo4j-admin database load 参数
参数 描述

<database>

要加载的数据库名称。可以使用 * 和 ? 进行通配符匹配。请注意,* 和 ? 在某些 shell 中有特殊含义,可能需要进行转义或使用引号括起来。

选项

表 2. neo4j-admin database load 选项
选项 描述 默认

--additional-config=<file>[1]

包含额外配置的配置文件。

--expand-commands

允许在配置值评估中进行命令扩展。

--from-path=<path>

包含归档文件的目录路径。可以使用适当的 URI 作为路径,从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶中加载数据库。

--from-stdin

从标准输入读取归档文件。

-h, --help

显示此帮助消息并退出。

--info

打印有关归档文件的元数据信息,而不是加载其中包含的数据库。

--overwrite-destination[=true|false]

如果需要替换现有数据库。

false

--verbose

启用详细输出。

1. 有关详细信息,请参阅 Neo4j Admin 和 Neo4j CLI → 配置

--from-path=<path> 选项也可以从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶中加载数据库。有关更多信息,请参阅 从云存储加载转储

示例

以下是如何加载通过 备份脱机数据库 一节中创建的数据库转储 (database.dump) 的示例,使用的是 neo4j-admin database load 命令,或加载由 备份联机数据库 中使用 neo4j-admin database backup 命令创建的完整备份制品。当替换现有数据库时,必须在运行命令之前将其关闭。由于您正在替换现有数据库,因此需要使用 --overwrite-destination 选项。

如果您在企业版中不是替换现有数据库,则必须在加载操作完成后创建该数据库(通过针对 system 数据库运行 CREATE DATABASE)。

当使用 load 命令为集群设定种子且数据库的先前版本存在时,必须首先将其删除(使用 DROP DATABASE)。或者,您可以停止 Neo4j 实例并使用 neo4j-admin server unbind 将其与集群解绑,以移除其集群状态数据。如果您在加载转储前未执行 DROP 或解绑操作,则该数据库的存储文件将与其集群状态不同步,从而可能导致逻辑损坏。更多信息,请参阅 集群设定种子 (Seed a cluster)

neo4j-admin database load 不能应用于 复合数据库 (Composite databases)。它必须直接在与该复合数据库关联的数据库上运行。

从本地目录加载转储

您可以使用以下命令从本地目录加载转储

bin/neo4j-admin database load --from-path=/full-path/data/dumps neo4j --overwrite-destination=true

您可以使用相同的命令从其完整备份制品中加载数据库

bin/neo4j-admin database load --from-path=/full-path/to/backups neo4j --overwrite-destination=true

以下示例展示了如何为 load 命令指定特定的归档文件。

cat foo.dump | neo4j-admin database load --from-stdin mydatabase

从云存储加载转储

在 Neo4j 2025.03 中,引入了新的云集成设置,为云生态系统中的部署和管理提供更好的支持。详情请参阅 配置设置 → 云存储集成设置

以下示例展示了如何使用 --from-path 选项加载位于云存储桶中的数据库转储。

Neo4j 使用 AWS SDK v2 通过 AWS URL 调用 AWS 上的 API。或者,您可以使用系统变量 aws.endpointUrls3aws.endpointUrlS3aws.endpointUrl,或环境变量 AWS_ENDPOINT_URL_S3AWS_ENDPOINT_URL 来覆盖端点,以便 AWS SDK 可以与 Ceph、Minio 或 LocalStack 等替代存储系统通信。

  1. 按照 AWS 官方文档中的说明安装 AWS CLI — 安装 AWS CLI 版本 2

  2. 使用 AWS CLI 创建 S3 存储桶和用于存储备份文件的目录:

    aws s3 mb --region=us-east-1 s3://myBucket
    aws s3api put-object --bucket myBucket --key myDirectory/

    有关如何创建存储桶和使用 AWS CLI 的更多信息,请参阅 AWS 官方文档 — 使用 AWS CLI 使用 Amazon S3使用 AWS CLI 的高级 (s3) 命令

  3. 通过运行以下命令验证 ~/.aws/config 文件是否正确:

    cat ~/.aws/config

    输出应如下所示:

    [default]
    region=us-east-1
  4. 通过在 ~/.aws/credentials 文件中设置 aws_access_key_idaws_secret_access_key 并根据需要使用存储桶策略,来配置对 AWS S3 存储桶的访问。例如:

    1. 使用 aws configure set aws_access_key_id aws_secret_access_key 命令设置您的 IAM 凭据,并验证 ~/.aws/credentials 是否正确:

      cat ~/.aws/credentials

      输出应如下所示:

      [default]
      aws_access_key_id=this.is.secret
      aws_secret_access_key=this.is.super.secret
    2. 此外,您可以使用基于资源的策略向您的 S3 存储桶及其中的对象授予访问权限。创建包含以下内容的策略文档并将其附加到存储桶。请注意,为了能够下载和上传文件,两个资源条目都很重要。

      {
          "Version": "2012-10-17",
          "Id": "Neo4jBackupAggregatePolicy",
          "Statement": [
              {
                  "Sid": "Neo4jBackupAggregateStatement",
                  "Effect": "Allow",
                  "Action": [
                      "s3:ListBucket",
                      "s3:GetObject",
                      "s3:PutObject",
                      "s3:DeleteObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::myBucket/*",
                      "arn:aws:s3:::myBucket"
                  ]
              }
          ]
      }
  5. 运行 neo4j-admin database load 命令从 AWS S3 存储加载转储。该示例假设您的转储制品位于存储桶的 myBucket/myDirectory 文件夹中。

    bin/neo4j-admin database load mydatabase --from-path=s3://myBucket/myDirectory/ --overwrite-destination=true
  1. 确保您拥有 Google 帐户,并在 Google Cloud Platform (GCP) 中创建了项目。

    1. 按照 Google 官方文档中的说明安装 gcloud CLI — 安装 gcloud CLI

    2. 根据 Google 官方文档创建服务帐户和服务帐户密钥 — 创建服务帐户创建和管理服务帐户密钥

    3. 下载服务帐户的 JSON 密钥文件。

    4. GOOGLE_APPLICATION_CREDENTIALSGOOGLE_CLOUD_PROJECT 环境变量分别设置为 JSON 密钥文件的路径和项目 ID:

      export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json"
      export GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_ID
    5. 使用您创建的服务帐户的电子邮件地址、JSON 密钥文件的路径和项目 ID 对 gcloud CLI 进行身份验证:

      gcloud auth activate-service-account service-account@example.com --key-file=$GOOGLE_APPLICATION_CREDENTIALS --project=$GOOGLE_CLOUD_PROJECT

      有关更多信息,请参阅 Google 官方文档 — gcloud auth activate-service-account

    6. 按照 Google 官方文档在 Google Cloud Storage 中创建存储桶 — 创建存储桶

    7. 运行以下命令验证存储桶已创建:

      gcloud storage ls

      输出应列出创建的存储桶。

  2. 运行 neo4j-admin database load 命令从 Google 存储桶加载转储。该示例假设您的转储制品位于存储桶的 myBucket/myDirectory 文件夹中。

    bin/neo4j-admin database load mydatabase --from-path=gs://myBucket/myDirectory/ --overwrite-destination=true
  1. 确保您拥有 Azure 帐户、Azure 存储帐户和 blob 容器。

    1. 您可以使用 Azure 门户创建存储帐户。
      有关详细信息,请参阅 Azure 官方文档 创建存储帐户

    2. 在 Azure 门户中创建 blob 容器。
      有关详细信息,请参阅 Azure 官方文档 快速入门:使用 Azure 门户上传、下载和列出 blob

  2. 按照 Azure 官方文档中的说明安装 Azure CLI — Azure 官方文档

  3. 使用默认 Azure 凭据针对 Azure 对 neo4j 或 neo4j-admin 进程进行身份验证。
    有关详细信息,请参阅 Azure 官方文档 默认 Azure 凭据

    az login

    完成后,您应该可以在 neo4j 或 neo4j-admin 中使用 Azure URL。

  4. 要验证您是否可以使用登录凭据访问容器,请运行以下命令:

    # Upload a file:
    az storage blob upload --file someLocalFile  --account-name accountName - --container someContainer --name remoteFileName  --auth-mode login
    
    # Download the file
    az storage blob download  --account-name accountName --container someContainer --name remoteFileName --file downloadedFile --auth-mode login
    
    # List container files
    az storage blob list  --account-name someContainer --container someContainer  --auth-mode login
  5. 运行 neo4j-admin database load 命令从 Azure blob 存储容器加载转储。该示例假设您的转储制品位于您 Azure 账户的 myStorageAccount/myContainer/myDirectory 文件夹中。

    bin/neo4j-admin database load mydatabase --from-path=azb://myStorageAccount/myContainer/myDirectory --overwrite-destination=true