从 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 种子也可以与 |
Neo4j 中的种子提供程序
种子可以是完整备份、差异备份(参见 CloudSeedProvider
)或现有数据库的转储。种子的来源称为“种子提供程序”。
该机制是可插拔的,允许支持新的种子源(有关更多信息,请参阅 Java 参考 → 实现自定义种子提供程序)。
本产品内置支持从已挂载文件系统 (file)、FTP 服务器、HTTP/HTTPS 服务器、Amazon S3、Google Cloud Storage 和 Azure Cloud Storage 获取种子。
Amazon S3、Google Cloud Storage 和 Azure Cloud Storage 默认受支持,但其他提供程序需要配置 |
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 官方文档中的说明安装 AWS CLI——安装 AWS CLI 版本 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 结合使用。
-
通过运行以下命令验证
~/.aws/config
文件是否正确cat ~/.aws/config
输出应如下所示
[default] region=us-east-1
-
通过在
~/.aws/credentials
文件中设置aws_access_key_id
和aws_secret_access_key
,并在需要时使用存储桶策略来配置对 AWS S3 存储桶的访问。例如-
使用
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
-
此外,您可以使用基于资源的策略来授予对 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" ] } ] }
-
-
从
myBackup.backup
创建数据库。CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 's3://myBucket/myBackup.backup' }
-
请确保您拥有 Google 帐户并在 Google Cloud Platform (GCP) 中创建了项目。
-
请按照 Google 官方文档中的说明安装
gcloud
CLI——安装 gcloud CLI。 -
请使用 Google 官方文档创建服务帐号和服务帐号密钥——创建服务帐号 以及 创建和管理服务帐号密钥。
-
下载服务帐号的 JSON 密钥文件。
-
将
GOOGLE_APPLICATION_CREDENTIALS
和GOOGLE_CLOUD_PROJECT
环境变量分别设置为 JSON 密钥文件的路径和项目 ID。export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json" export GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_ID
-
使用您创建的服务帐号的电子邮件地址、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。
-
请使用 Google 官方文档在 Google Cloud Storage 中创建存储桶——创建存储桶。
-
通过运行以下命令验证存储桶是否已创建
gcloud storage ls
输出应列出已创建的存储桶。
-
-
从
myBackup.backup
创建数据库。CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 'gs://myBucket/myBackup.backup' }
-
请确保您拥有 Azure 帐户、Azure 存储帐户和 Blob 容器。
-
您可以使用 Azure 门户创建存储帐户。
有关更多信息,请参阅 Azure 官方文档中的创建存储帐户。 -
在 Azure 门户中创建 Blob 容器。
有关更多信息,请参阅 Azure 官方文档中的快速入门:使用 Azure 门户上传、下载和列出 Blob。
-
-
请按照 Azure 官方文档中的说明安装 Azure CLI——Azure 官方文档。
-
使用默认的 Azure 凭据对 neo4j 或 neo4j-admin 进程进行 Azure 身份验证。
有关更多信息,请参阅 Azure 官方文档中的默认 Azure 凭据。az login
然后,您就可以在 neo4j 或 neo4j-admin 中使用 Azure URL 了。
-
要验证您是否使用登录凭据访问了容器,请运行以下命令
# 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
-
从
myBackup.backup
创建数据库。CREATE DATABASE foo OPTIONS { existingData: 'use', seedURI: 'azb://myStorageAccount/myContainer/myBackup.backup' }
S3SeedProvider
S3SeedProvider
支持
-
s3:
在 5.26 中已弃用
Neo4j 捆绑了 AWS S3 连接所需的库。因此,如果您使用 |
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] }
其中 accessKey
和 secretKey
由 AWS 提供。
种子提供程序参考
URL 方案 | 种子提供程序 | URI 示例 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
支持种子恢复到特定日期或事务 ID
从 Neo4j 2025.01 开始,创建数据库时可以通过 seedRestoreUntil
选项将种子恢复到特定日期或事务 ID。
seedRestoreUntil
选项受 CloudSeedProvider
和 FileSeedProvider
支持。
- 种子恢复到特定日期
-
要将种子恢复到特定日期,您需要传递包含截至该日期的数据的差异备份。
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 的事务来为数据库提供初始数据。