检查数据库一致性

您可以使用 neo4j-admin database check 命令来检查数据库、转储文件(dump)或完整恢复后的备份的一致性。neo4j-admin 工具位于 /bin 目录下。

语法

neo4j-admin database check 命令的语法如下

neo4j-admin database check [-h] [--expand-commands] [--force] [--verbose]
                           [--check-counts[=true|false]] [--check-graph[=true|false]]
                           [--check-indexes[=true|false]] [--check-property-owners[=true|false]]
                           [--additional-config=<file>] [--max-off-heap-memory=<size>]
                           [--report-path=<path>] [--threads=<number of threads>]
                           [[--from-path-data=<path> --from-path-txn=<path>] | [--from-path=<path> [--temp-path=<path>]]]
                           <database>

描述

该命令允许检查数据库、转储文件或完整备份的一致性。它不能用于当前正在使用的数据库。

某些检查可能会非常耗费资源,因此对于超大型数据库,关闭部分检查可能很有用。增加堆内存大小可能也是个不错的选择。

不建议使用 NFS 来检查数据库、转储文件或完整备份的一致性,因为这会显著降低处理速度。

参数

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

<database>

要检查的数据库名称。

选项

neo4j-admin database check 命令具有以下选项

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

--verbose

启用详细输出。

-h, --help

显示此帮助消息并退出。

--expand-commands

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

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

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

--force

强制执行一致性检查,忽略资源限制,并可能执行更彻底的检查。

--check-indexes[=true|false]

对索引执行一致性检查。

true

--check-graph[=true|false]

对节点、关系、属性、类型和令牌(token)执行一致性检查。

true

--check-counts[=true|false]

对计数执行一致性检查。需要 <check-graph>,如果未显式禁用,可能会隐式启用 <check-graph>

<check-graph>

--check-property-owners[=true|false]

对属性的所有权执行一致性检查。需要 <check-graph>,如果未显式禁用,可能会隐式启用 <check-graph>

false

--report-path=<path>

写入一致性报告的路径。除非路径以 .report 结尾,否则将被视为目录。

.

--max-off-heap-memory=<size>

该命令可用于页面缓存和各种缓存数据结构以提高性能的最大内存。值可以是纯数字(例如 10000000),也可以是诸如 20G(代表 20 GB)或 70%(代表机器当前空闲内存的 70%)的值。

90%

--threads=<number of threads>

用于执行一致性检查的线程数。

机器上的 CPU 核心数。

--from-path-data=<path>

数据库目录的路径,其中包含要作为源的数据库目录。

server.directories.data/databases

--from-path-txn=<path>

事务目录的路径,其中包含要作为源的数据库的事务目录。

server.directories.transaction.logs.root

--from-path=<path>

2025.09 版本变更 指向备份文件或包含转储/备份制品的目录的路径。如果路径指向单个文件,则选中该制品并检查其一致性。如果提供的是目录,该工具将选择其中最新的备份链(基于事务 ID)并检查该链的一致性。

--temp-path=<path>

如果需要,用作提取转储/备份制品的暂存区路径。

<from-path>

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

--from-path=<path> 选项还可以检查 AWS S3 存储桶和 Google Cloud 存储桶中的数据库制品。有关详细信息,请参阅 检查存储在云存储中的备份/转储的一致性

输出

如果一致性检查器未发现错误,它将正常退出且不生成报告。如果一致性检查器发现错误,它将以非 0 的退出代码退出,并写入一个格式为 inconsistencies-YYYY-MM-DD.HH24.MI.SS.report 的报告文件。报告文件的位置为当前工作目录,或由 report-path 参数指定。

示例

以下是检查数据库、转储或备份一致性的示例。

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

检查本地数据库的一致性

请注意,必须先停止数据库。

bin/neo4j-admin database check neo4j

输出将类似于以下内容

Running consistency check with max off-heap:618.6MiB
  Store size:160.0KiB
  Allocated page cache:160.0KiB
  Off-heap memory for caching:618.5MiB
ID Generator consistency check
....................  10%
....................  20%
....................  30%
....................  40%
....................  50%
....................  60%
....................  70%
....................  80%
....................  90%
.................... 100%
Index structure consistency check
....................  10%
....................  20%
....................  30%
....................  40%
....................  50%
....................  60%
....................  70%
....................  80%
....................  90%
.................... 100%
Consistency check
....................  10%
....................  20%
....................  30%
....................  40%
....................  50%
....................  60%
....................  70%
....................  80%
....................  90%
.................... 100%

检查备份/转储的一致性

请注意,差分备份或未恢复的完整备份不支持一致性检查。在运行一致性检查之前,必须将备份链聚合为完整的已恢复备份制品。

有关详细信息,请参阅 聚合数据库备份链

使用 --from-path 选项运行以检查备份或转储的一致性。
从 Neo4j 2025.09 开始,该选项接受指向您要检查一致性的特定备份或转储文件的路径。如果仅提供目录,将检查该目录中最近的备份链(基于事务 ID)。

bin/neo4j-admin database check --from-path=<path-to-backup-or-dump> neo4j

检查存储在云存储中的备份/转储的一致性

以下示例展示了如何使用 --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. 运行 bin/neo4j-admin database check 命令来检查位于 AWS S3 存储桶中的数据库的一致性。该示例假设您的存储桶的 myBucket/myDirectory 文件夹中存有备份或转储制品。

    bin/neo4j-admin database check mydatabase --from-path=s3://myBucket/myDirectory/
  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. 运行 bin/neo4j-admin database check 命令来检查位于 Google 存储桶中的数据库的一致性。该示例假设您的存储桶的 myBucket/myDirectory 文件夹中存有备份或转储制品。

    bin/neo4j-admin database check mydatabase --from-path=gs://myBucket/myDirectory/
  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. 运行 bin/neo4j-admin database check 命令来检查位于 Azure Blob 存储容器中的数据库的一致性。该示例假设 Azure 中的 myStorageAccount/myContainer/myDirectory 文件夹中存有备份或转储制品。

    bin/neo4j-admin database check mydatabase --from-path=azb://myStorageAccount/myContainer/myDirectory/