|| 恢复数据库备份 - 操作手册 - Neo4j 文档

恢复数据库备份

命令

数据库备份工件(完整或差异)可以使用 neo4j-admin 的 restore 命令在相同或更高版本的 Neo4j 中恢复。

您还可以使用 neo4j-admin database load 命令加载**完整**数据库备份工件。此功能在社区版中可用。

不支持将数据库备份恢复到以前的 Neo4j 版本。

恢复操作完成后,您必须创建数据库(使用针对 system 数据库的 CREATE DATABASE 命令),除非您要替换现有数据库。neo4j-admin database restore 必须以 neo4j 用户身份调用,以确保适当的文件权限。更多信息,请参阅创建数据库。

如果您正在使用 CDC,请确保您使用相同的 txLogEnrichment 值创建新数据库,并在您的 CDC 应用程序中处理 CDC 数据可能丢失或损坏的情况。更多信息,请参阅数据变更捕获 (CDC) 文档。

恢复备份链时,必须首先重放差异备份工件中包含的事务日志。此恢复操作占用大量资源,可以通过使用聚合命令将其与恢复操作解耦。

语法

neo4j-admin database restore [-h] [--expand-commands] [--verbose] [--overwrite-destination
                             [=true|false]] [--source-database[=source-database-name]]
                             [--additional-config=<file>] --from-path=<path> [,<path>...]
                             [--restore-until=<recovery-criteria>] [--temp-path=<path>]
                             [--to-path-data=<path>] [--to-path-txn=<path>] [<database>]

参数

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

[<database>]

恢复后的数据库名称。只有当 --from-path 选项指向单个工件的路径时,才允许使用此参数。

选项

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

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

包含附加配置的配置文件。

--expand-commands

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

--from-path=<path>[,<path>…​]

路径可以指向单个备份工件、包含工件的文件夹或以逗号分隔的备份工件文件列表。工件文件可以是 1) 完整备份,在这种情况下直接恢复;或者 2) 差异备份,在这种情况下,命令首先尝试在文件夹中找到以该特定差异备份结束的备份链,然后恢复该链。可以使用适当的 URI 作为路径,从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶恢复备份。

-h, --help

显示此帮助消息并退出。

--overwrite-destination[=true|false]

是否应替换现有数据库。

此选项在集群上不安全,因为集群具有与恢复的数据库不一致的附加状态。在集群中,恢复到新数据库以避免此问题。

false

--restore-until=<recovery-criteria>

差异备份工件包含事务日志,在恢复备份链时,这些日志可以重放并应用于完整备份工件中包含的存储。数据库会应用日志直到满足恢复条件。目前支持的条件是:<transactionID> 和 <timestamp>。

  • 要将数据库恢复到某个事务 ID,所需的事务条件应类似于 --restore-until=123,其中 123 是提供的事务 ID。恢复操作会恢复事务日志,直到(但不包括)事务 123。

  • 要将数据库恢复到特定日期,所需的日期条件应类似于 --restore-until=2021-09-11 10:15:30,其中 2021-09-11 10:15:30 是 UTC 日期和时间。恢复操作会恢复在提供的时间戳之前提交的事务。

--source-database[=source-database-name]

2025.02 引入 源数据库名称。如果 --from-path 指向包含多个数据库备份的文件夹,您必须指定数据库名称以筛选工件。

--to-path-data=<path>

数据库的基本目录。只有当 --from-path 参数指向恰好一个目录时,才允许使用此选项。

--to-path-txn=<path>

事务日志的基本目录。只有当 --from-path 参数指向恰好一个目录时,才允许使用此选项。

--temp-path=<path>

提供一个临时空目录的路径,用于存储备份文件直到命令完成。命令完成后,文件将被删除。

--verbose

启用详细输出。

1. 更多详情请参阅Neo4j Admin 和 Neo4j CLI → 配置。

--from-path=<path> 选项还可以从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶加载备份。更多信息,请参阅恢复位于云存储中的备份。

--temp-path 选项可以解决执行备份相关命令时(尤其是涉及云存储时)与磁盘空间相关的潜在问题。

如果未设置 --temp-path,则会在 --from-path 选项指定的目录内创建一个临时目录。

如果您未提供 --from-path 选项,或者您提供的路径指向云存储桶,则会在 Neo4j 的当前工作目录中创建一个临时文件夹。此备用选项可能导致问题,因为本地文件系统(或安装 Neo4j 的分区)可能没有足够的可用磁盘空间来容纳中间计算。

因此,强烈建议提供 --temp-path 选项。

示例

以下示例展示如何检查您的备份目录并恢复数据库备份(在备份在线数据库部分创建)。假定备份工件(完整备份和差异备份)位于 /path/to/mybackups 目录中。

检查备份工件

使用以下命令检查备份目录

bin/neo4j-admin database backup --inspect-path=/path/to/mybackups
示例输出
|                                                       FILE | DATABASE |                          DATABASE ID |                TIME |  FULL | COMPRESSED | LOWEST TX | HIGHEST TX |
| file:///path/to/mybackups/neo4j-2023-06-29T14-46-27.backup |    neo4j | c8368b24-55e2-474d-bb41-75657f5bfcde | 2023-06-29T13:46:27 |  true |       true |         1 |         11 |
| file:///path/to/mybackups/neo4j-2023-06-29T14-50-45.backup |    neo4j | c8368b24-55e2-474d-bb41-75657f5bfcde | 2023-06-29T13:50:45 | false |       true |        12 |         14 |
| file:///path/to/mybackups/neo4j-2023-06-29T14-51-33.backup |    neo4j | c8368b24-55e2-474d-bb41-75657f5bfcde | 2023-06-29T13:51:33 | false |       true |        15 |         18 |

示例输出显示备份工件是备份链的一部分。第一个工件是完整备份,另外两个是差异备份。LOWEST TX 和 HIGHEST TX 列显示备份工件中第一个和最后一个事务的事务 ID。这意味着,如果您恢复 neo4j-2023-06-29T14-50-45.backup,您的数据库将把 14 作为最后一个事务 ID。

恢复数据库备份

以下示例假设您希望将数据恢复到一个名为 mydatabase 的新数据库中。如果您想替换现有数据库,您需要先停止它,并在恢复命令中添加选项 --overwrite-destination=true。

  1. 通过运行以下命令恢复数据库备份

    bin/neo4j-admin database restore --from-path=/path/to/backups/neo4j-2023-06-29T14-51-33.backup mydatabase

    --from-path= 参数必须包含备份链中最后一个备份的路径,在此示例中为 neo4j-2023-06-29T14-51-33.backup。

    如果您想同时恢复多个数据库,您必须先停止它们,然后可以通过指定逗号分隔的备份工件路径列表来修改命令,并移除 <database> 参数。如果您正在替换现有数据库,您还应该跳过后续的 CREATE DATABASE 步骤。

  2. 使用针对 system 数据库的 CREATE DATABASE 命令创建新数据库。

    CREATE DATABASE mydatabase

恢复数据到特定日期

要将数据恢复到特定日期,您需要传入包含该日期之前数据的备份工件。

此示例假设您希望将数据恢复到一个名为 mydatabase 的新数据库中。如果您想替换现有数据库,您需要先停止它,并在恢复命令中添加选项 --overwrite-destination=true。

  1. 从包含所需日期之前数据的备份中恢复。

    bin/neo4j-admin database restore --from-path=/path/to/mybackups/neo4j-2023-06-29T14-50-45.backup --restore-until="2023-06-29 13:50:45" mydatabase

    --from-path= 参数必须包含完整备份或差异备份工件的路径。--restore-until= 参数必须包含 UTC 日期和时间。恢复操作会恢复在提供的日期和时间之前提交的所有事务。

    如果您想同时恢复多个数据库,您必须先停止它们,然后可以通过指定逗号分隔的备份工件路径列表来修改命令,并移除 <database> 参数。如果您正在替换现有数据库,您还应该跳过后续的 CREATE DATABASE 步骤。

    如果您知道在您想要恢复到的日期之前提交的最后一个事务的事务 ID,您可以使用 --restore-until= 参数,将事务 ID 而不是日期作为其值。例如,--restore-until=123。

  2. 使用针对 system 数据库的 CREATE DATABASE 命令创建新数据库

    CREATE DATABASE mydatabase;

恢复位于云存储中的备份

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

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

Neo4j 使用 AWS SDK v2 通过 AWS URL 调用 AWS 上的 API。或者,您可以覆盖端点,以便 AWS SDK 可以使用系统变量 aws.endpointUrls3、aws.endpointUrlS3 或 aws.endpointUrl,或者环境变量 AWS_ENDPOINT_URL_S3 或 AWS_ENDPOINT_URL 与替代存储系统(例如 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 官方文档 —— 将 Amazon S3 与 AWS CLI 结合使用 和 将高级 (s3) 命令与 AWS CLI 结合使用。

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

    cat ~/.aws/config

    输出应如下所示

    [default]
    region=us-east-1
  4. 通过在 ~/.aws/credentials 文件中设置 aws_access_key_id 和 aws_secret_access_key 来配置对您的 AWS S3 存储桶的访问,如果需要,还可以使用存储桶策略。例如

    1. 使用 aws configure set aws_access_key_id aws_secret_access_key 命令设置您的 AWS 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 restore 命令以恢复位于您的 AWS S3 存储中的数据库。该示例假定您的备份工件位于存储桶中的 myBucket/myDirectory 文件夹中。

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

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

    2. 使用 Google 官方文档创建服务帐号和服务帐号密钥 —— 创建服务帐号 和 创建和管理服务帐号密钥。

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

    4. 将 GOOGLE_APPLICATION_CREDENTIALS 和 GOOGLE_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 restore 命令以恢复位于您的 Google 存储桶中给定文件夹中的数据库。该示例假定您的备份工件位于存储桶中的 myBucket/myDirectory 文件夹中。

    bin/neo4j-admin database restore --to-path=gs://myBucket/myDirectory/myBackup.backup mydatabase
  1. 确保您拥有 Azure 帐户、Azure 存储帐户和 Blob 容器。

    1. 您可以使用 Azure 门户创建存储帐户。
      更多信息,请参阅 Azure 官方文档:创建存储帐户。

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

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

  3. 使用默认 Azure 凭据对 neo4j 或 neo4j-admin 进程进行 Azure 身份验证。
    更多信息,请参阅 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 restore 命令以恢复位于您的 Azure Blob 存储容器中给定文件夹中的数据库。该示例假定您的备份工件位于 myStorageAccount/myContainer/myDirectory 文件夹中。

    bin/neo4j-admin database restore --to-path=azb://myStorageAccount/myContainer/myDirectory/myBackup.backup mydatabase

在集群中恢复数据库备份

要在集群中恢复数据库备份,请指定其中一台服务器作为种子服务器,并在该服务器上恢复数据库备份。然后,使用该服务器在集群中的其他服务器上创建恢复的数据库。更多信息,请参阅指定种子服务器。

恢复用户和角色元数据

如果您使用 --include-metadata 选项备份了数据库,您可以手动恢复用户和角色元数据。

在 <NEO4J_HOME> 目录中,您可以使用Cypher Shell 运行 neo4j-admin database restore 命令输出的 Cypher 脚本 data/databases/databasename/tools/metadata_script.cypher

使用 cat (UNIX)

cat 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 data\databases\databasename\tools\metadata_script.cypher | bin\cypher-shell.bat -u user -p password -a ip_address:port -d system --param "database => 'databasename'"
© . This site is unofficial and not affiliated with Neo4j, Inc.