聚合数据库备份链

命令

aggregate 命令将备份制品链转换为单个完整备份制品

backup chain aggregation

聚合备份链的主要好处包括:

  • 减小给定备份文件夹中备份制品的大小。

  • 通过生成一个可随时恢复的单一备份制品,保持较低的恢复时间目标 (RTO)。作为聚合的一部分,差异备份中包含的事务会被应用到完整备份制品中的存储中。此操作称为恢复,可能非常耗时。

  • 降低丢失备份链环节的风险。

  • 某些命令(如一致性检查)无法针对备份链或未恢复的完整备份运行。聚合操作会生成一个它们可以处理的制品。

语法

neo4j-admin backup aggregate [-h] [--expand-commands]
                                      [--verbose] [--keep-old-backup[=true|false]]
                                      [--parallel-recovery[=true|false]]
                                      [--additional-config=<file>] --from-path=<path>
                                      [--temp-path=<path>] [<database>]

在 Neo4j 2025.01 中,neo4j-admin database aggregate-backup 命令已被弃用。建议使用新的命令名称:neo4j-admin backup aggregate

描述

将备份制品链聚合成单个制品。

参数

表 1. neo4j-admin backup aggregate 参数
参数 描述

[<database>]

要聚合制品的数据库名称。可以使用 * 和 ? 进行通配符匹配。

选项

表 2. neo4j-admin backup aggregate 选项
选项 描述 默认

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

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

--expand-commands

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

--from-path=<path>

接受单个制品文件的路径或包含备份制品的文件夹路径。

提供文件时,应省略 <database> 参数。可以使用相应的 URI 作为路径,聚合来自 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶的备份制品。

-h, --help

显示此帮助消息并退出。

--keep-old-backup[=true|false]

如果设置为 true,则不会删除旧的备份链。

false

--parallel-recovery[=true|false]

允许使用多个线程并行将提取的事务应用到备份中。对于某些数据库和工作负载,这可能会显著缩短聚合时间。注意:这是一个实验性选项。使用前请咨询 Neo4j 支持团队。

false

--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 选项。

示例

聚合位于给定文件夹中的备份链

以下是如何对给定文件夹中 neo4j 数据库的一组备份执行聚合的示例

bin/neo4j-admin backup aggregate --from-path=/mnt/backups/ neo4j

该命令首先在 /mnt/backups/ 目录中查找数据库 neo4j 的备份链。如果找到,则将其聚合为单个备份制品。

聚合通过给定备份文件识别的备份链

以下是如何通过给定备份文件识别 neo4j 数据库的一组备份并执行聚合的示例

bin/neo4j-admin backup aggregate --from-path=/mnt/backups/neo4j-2022-10-18T13-00-07.backup

该命令在 /mnt/backups/ 目录中检查包含文件 neo4j-2022-10-18T13-00-07.backupneo4j 数据库备份链。如果找到,则将其聚合为单个备份制品。

聚合位于云存储中的备份链

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

以下示例展示了如何对位于云存储中的一组备份执行聚合。

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. 然后,使用以下命令聚合位于 AWS S3 存储桶中指定文件夹的备份链。该示例假设您的备份链位于 myBucket/myDirectory 文件夹中,可通过文件 myBackup.backup 进行识别

    bin/neo4j-admin backup aggregate --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_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. 然后,使用以下命令聚合位于 Google Cloud 存储桶中指定文件夹的备份链。该示例假设您的备份链位于 myBucket/myDirectory 文件夹中,可通过文件 myBackup.backup 进行识别

    bin/neo4j-admin backup aggregate --from-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 凭据针对 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. 然后,使用以下命令聚合位于 Azure Blob 存储容器中指定文件夹的备份链。该示例假设您的备份链位于 myStorageAccount/myContainer/myDirectory 文件夹中,可通过文件 myBackup.backup 进行识别

    bin/neo4j-admin backup aggregate --from-path=azb://myStorageAccount/myContainer/myDirectory/myBackup.backup mydatabase

聚合未恢复的完整备份

要检查完整备份是否处于恢复状态,请运行 neo4j-admin backup inspect 命令

bin/neo4j-admin backup inspect /mnt/backups/neo4j-2025-09-10T08-14-56.backup

输出将包含 RECOVERED 列。如果显示 false,则说明备份尚未恢复

|                                                 FILE | DATABASE |                          DATABASE ID |          TIME (UTC) | FULL | COMPRESSED | LOWEST TX | HIGHEST TX | STORE ID HASH | RECOVERED |
| file:///mnt/backups/neo4j-2025-09-10T08-14-56.backup |    neo4j | 4e98fab8-6ae6-46cc-84c0-61ee8a8db60a | 2025-09-10T08:14:56 | true |       true |         1 |          3 |    -116350002 |     false |

如果您的完整备份未恢复,聚合它将执行恢复操作。运行以下命令

bin/neo4j-admin backup aggregate --from-path=/mnt/backups/neo4j-2025-09-10T08-14-56.backup --keep-old-backup=true

此命令将:

  • 在现有备份旁边生成一个新的已恢复备份。

  • 保留原始备份文件(由于使用了 --keep-old-backup=true)。

聚合后,您可以针对已恢复的备份运行一致性检查器和/或进行恢复。