从 URI 创建数据库

此方法使用外部源(通过 URI 指定)的相同种子来为所有数据库提供初始数据。

您可以将种子 URI 指定为 CREATE DATABASE 命令的参数

CREATE DATABASE foo OPTIONS {existingData: 'use', seedURI:'s3://myBucket/myBackup.backup'}

种子的下载和验证仅在新数据库启动时执行。如果失败,则数据库不可用,并且在 SHOW DATABASES 命令中会显示 statusMessage:“Unable to start database”(无法启动数据库)。

neo4j@neo4j> SHOW DATABASES;
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name    | type       | aliases | access       | address          | role      | writer | requestedStatus | currentStatus | statusMessage                                            | default | home  | constituents |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "seed3" | "standard" | []      | "read-write" | "localhost:7682" | "unknown" | FALSE  | "online"        | "offline"     | "Unable to start database `DatabaseId{3fe1a59b[seed3]}`" | FALSE   | FALSE | []           |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

要确定问题原因,建议查看 debug.log

从 Neo4j 2025.01 开始,URI 种子也可以与 CREATE OR REPLACE DATABASE 结合使用。

Neo4j 中的种子提供程序

种子可以是完整备份、差异备份(参见 CloudSeedProvider)或现有数据库的转储。种子的来源称为“种子提供程序”。

该机制是可插拔的,允许支持新的种子源(有关更多信息,请参阅 Java 参考 → 实现自定义种子提供程序)。

本产品内置支持从已挂载文件系统 (file)、FTP 服务器、HTTP/HTTPS 服务器、Amazon S3、Google Cloud Storage 和 Azure Cloud Storage 获取种子。

Amazon S3、Google Cloud Storage 和 Azure Cloud Storage 默认受支持,但其他提供程序需要配置 dbms.databases.seed_from_uri_providers

FileSeedProvider

FileSeedProvider 支持

  • file

URLConnectionSeedProvider

URLConnectionSeedProvider 支持以下功能

  • ftp

  • http

  • https

从 Neo4j 2025.01 开始,URLConnectionSeedProvider 不再支持 file

CloudSeedProvider

CloudSeedProvider 支持

  • s3

  • gs

  • azb

CloudSeedProvider 支持使用 差异备份 文件作为种子。通过提供的差异备份文件,CloudSeedProvider 会在包含差异备份文件的目录中搜索以指定差异备份结尾的 备份链,然后使用此备份链作为种子。

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 官方文档——将 Amazon S3 与 AWS CLI 结合使用将高级 (s3) 命令与 AWS CLI 结合使用

  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 命令设置您的 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. myBackup.backup 创建数据库。

    CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 's3://myBucket/myBackup.backup' }
  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. myBackup.backup 创建数据库。

    CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 'gs://myBucket/myBackup.backup' }
  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. myBackup.backup 创建数据库。

    CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 'azb://myStorageAccount/myContainer/myBackup.backup' }

S3SeedProvider

S3SeedProvider 支持

  • s3: 在 5.26 中已弃用

Neo4j 捆绑了 AWS S3 连接所需的库。因此,如果您使用 S3SeedProvider,则不需要 AWS CLI,但可以将其与 CloudSeedProvider 一起使用。

S3SeedProvider 需要额外配置。这通过 seedConfig 选项指定。此选项需要一个逗号分隔的配置列表。每个配置值都以名称开头,后跟 = 和值,例如

CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 's3://myBucket/myBackup.backup', seedConfig: 'region=eu-west-1' }

S3SeedProvider 还需要传入凭据。这些凭据通过 seedCredentials 选项指定。种子凭据从 Cypher 命令安全地传递到托管数据库的每个服务器。为此,集群中的每个服务器上的 Neo4j 都必须配置相同的密钥库。这与远程别名所需的配置相同,请参见 通过远程数据库别名配置 DBMS。如果未执行此配置,则 seedCredentials 选项将失败。

CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 's3://myBucket/myBackup.backup', seedConfig: 'region=eu-west-1', seedCredentials: [accessKey];[secretKey] }

其中 accessKeysecretKey 由 AWS 提供。

种子提供程序参考

URL 方案 种子提供程序 URI 示例

file

FileSeedProvider

file:///tmp/backup1.backup

ftp

URLConnectionSeedProvider

ftp://myftp.com/backups/backup1.backup

http

URLConnectionSeedProvider

http://myhttp.com/backups/backup1.backup

https

URLConnectionSeedProvider

https://myhttp.com/backups/backup1.backup

s3

S3SeedProvider 在 5.26 中已弃用
CloudSeedProvider

s3://mybucket/backups/backup1.backup

gs

CloudSeedProvider

gs://mybucket/backups/backup1.backup

azb

CloudSeedProvider

azb://mystorageaccount.blob/backupscontainer/backup1.backup

支持种子恢复到特定日期或事务 ID

从 Neo4j 2025.01 开始,创建数据库时可以通过 seedRestoreUntil 选项将种子恢复到特定日期或事务 ID。

seedRestoreUntil 选项受 CloudSeedProviderFileSeedProvider 支持。

种子恢复到特定日期

要将种子恢复到特定日期,您需要传递包含截至该日期的数据的差异备份。

CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 's3://myBucket/myBackup.backup', seedRestoreUntil: datetime("2019-06-01T18:40:32.142+0100") }

这将使用在提供的时间戳之前提交的事务来为数据库提供初始数据。

种子恢复到特定事务 ID

要将种子恢复到特定事务 ID,您需要传递包含截至该事务 ID 的数据的差异备份。

CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 's3://myBucket/myBackup.backup', seedRestoreUntil: 123 }

这将使用截至(但不包括)事务 123 的事务来为数据库提供初始数据。

© . All rights reserved.