恢复数据库备份
命令
可以使用neo4j-admin
的restore
命令在相同或更高版本的 Neo4j 中恢复数据库备份工件(完整或差异)。
从 Neo4j 5.20 开始,您可以使用neo4j-admin database load
命令加载**完整**的数据库备份工件。此功能在社区版中可用。
不支持将数据库备份恢复到之前的 Neo4j 版本。 |
除非您要替换现有数据库,否则必须在恢复操作完成后创建数据库(对system
数据库使用CREATE DATABASE
)。必须以neo4j
用户身份调用neo4j-admin database restore
,以确保适当的文件权限。有关更多信息,请参阅创建数据库。
如果您使用 CDC,请确保使用相同的 |
恢复备份链时,首先必须重放差异备份构件中包含的事务日志。此恢复操作需要大量资源,并且可以通过使用aggregate命令将其与恢复操作分离。 |
语法
neo4j-admin database restore [-h] [--expand-commands]
[--verbose] [--overwrite-destination[=true|false]]
[--additional-config=<file>]
--from-path=<path>[,<path>...]
[--restore-until=<recovery-criteria>] [--temp-path=<path>]
[--to-path-data=<path>] [--to-path-txn=<path>]
[<database>]
参数
参数 | 描述 |
---|---|
|
恢复后数据库的名称。仅当 |
选项
选项 | 描述 | 默认值 | ||
---|---|---|---|---|
|
包含其他配置的配置文件。 |
|||
|
允许在配置值评估中扩展命令。 |
|||
|
指向备份构件文件的单个路径或用逗号分隔的路径列表。构件文件可以是 1) 全备份,在这种情况下直接恢复;或 2) 差异备份,在这种情况下,命令首先尝试在文件夹中查找以该特定差异备份结尾的备份链,然后恢复该链。可以使用适当的 URI 作为路径,从 AWS S3 存储桶、Google Cloud 存储桶和 Azure 存储桶恢复备份。 |
|||
|
显示此帮助消息并退出。 |
|||
|
是否应替换现有数据库。
|
|
||
|
差异备份构件包含事务日志,在恢复备份链时,可以重放这些日志并应用于完整备份构件中包含的存储。数据库应用日志,直到恢复谓词满足为止。当前支持的谓词为:
|
|||
|
数据库的基本目录。仅当 |
|||
|
事务日志的基本目录。仅当 |
|||
|
在 5.24 中引入 提供一个路径到一个用于存储备份文件直到命令完成的临时空目录。命令完成后,这些文件将被删除。 |
|||
|
启用详细输出。 |
|
Neo4j 5.24 引入了 如果未设置 如果未提供 因此,强烈建议提供 |
示例
以下示例显示了如何检查备份目录并恢复数据库备份,这些备份是在备份在线数据库部分中创建的。假设备份构件(完整和差异)位于/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
,则数据库的最后一个事务 ID 将为14
。
恢复数据库备份
以下示例假设您希望将数据恢复到一个名为mydatabase
的新数据库中。如果要替换现有数据库,则需要先停止它,然后将选项--overwrite-destination=true
添加到恢复命令中。
恢复完整备份
-
通过运行以下命令恢复数据库备份
bin/neo4j-admin database restore --from-path=/path/to/backups/neo4j-2023-05-05T11-26-38.backup mydatabase
--from-path=
参数必须包含链的最后一个备份的路径,在本例中为neo4j-2023-06-29T14-51-33.backup
。如果要一次恢复多个数据库,则必须先停止它们,然后您可以通过指定备份构件的逗号分隔的路径列表来更改命令,并删除
<database>
参数。如果要替换现有数据库,则之后也应跳过CREATE DATABASE
步骤。 -
使用针对
system
数据库的CREATE DATABASE
创建新数据库。CREATE DATABASE mydatabase
恢复到特定日期的数据
要恢复到特定日期的数据,您需要传递包含该日期之前数据的备份构件。
此示例假设您希望将数据恢复到一个名为mydatabase
的新数据库中。如果要替换现有数据库,则需要先停止它,然后将选项--overwrite-destination=true
添加到恢复命令中。
-
从包含所需日期之前数据的备份中恢复。
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
。 -
使用针对
system
数据库的CREATE DATABASE
创建新数据库CREATE DATABASE mydatabase;
恢复位于云存储中的备份
以下示例显示了如何使用--from-path
选项恢复位于云存储桶中的数据库。
Neo4j 使用 AWS SDK v2 通过 AWS URL 调用 AWS 上的 API。或者,您可以覆盖端点,以便 AWS SDK 可以使用系统变量 |
-
按照 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 官方文档 — 使用 AWS CLI 使用 Amazon S3和使用 AWS CLI 使用高级(s3)命令。
-
通过运行以下命令验证
~/.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" ] } ] }
-
-
运行
neo4j-admin database restore
命令以恢复位于 AWS S3 存储中的数据库。此示例假设您在存储桶中的myBucket/myDirectory
文件夹中具有备份构件。bin/neo4j-admin database restore --from-path=s3://myBucket/myDirectory/myBackup.backup mydatabase
-
确保您拥有 Google 帐户和在 Google Cloud Platform (GCP) 中创建的项目。
-
按照 Google 官方文档中的说明安装
gcloud
CLI — 安装 gcloud CLI。 -
使用 Google 官方文档创建服务帐户和服务帐户密钥 — 创建服务帐户和创建和管理服务帐户密钥。
-
下载服务帐户的 JSON 密钥文件。
-
将
GOOGLE_APPLICATION_CREDENTIALS
和GOOGLE_CLOUD_PROJECT
环境变量分别设置为 JSON 密钥文件的路径和项目 IDexport 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
输出应该列出已创建的存储桶。
-
-
运行
neo4j-admin database restore
命令以恢复位于 Google Cloud Storage 存储桶中给定文件夹中的数据库。此示例假设您的备份工件位于存储桶中的myBucket/myDirectory
文件夹中。bin/neo4j-admin database restore --to-path=gs://myBucket/myDirectory/myBackup.backup mydatabase
-
确保您拥有 Azure 帐户、Azure 存储帐户和 Blob 容器。
-
您可以使用 Azure 门户创建存储帐户。
有关更多信息,请参阅 Azure 官方文档 创建存储帐户。 -
在 Azure 门户中创建 Blob 容器。
有关更多信息,请参阅 Azure 官方文档 快速入门:使用 Azure 门户上传、下载和列出 Blob。
-
-
按照 Azure 官方文档中的说明安装 Azure CLI — Azure 官方文档。
-
使用默认的 Azure 凭据将 neo4j 或 neo4j-admin 进程认证到 Azure。
有关更多信息,请参阅 Azure 官方文档 默认 Azure 凭据。az login
然后,您应该准备好使用 Azure URL 在 neo4j 或 neo4j-admin 中。
-
要验证您是否可以使用登录凭据访问容器,请运行以下命令
# 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
-
运行
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/scripts/databasename/restore_metadata.cypher。
使用cat
(UNIX)
cat data/scripts/databasename/restore_metadata.cypher | bin/cypher-shell -u user -p password -a ip_address:port -d system --param "database => 'databasename'"
使用type
(Windows)
type data\scripts\databasename\restore_metadata.cypher | bin\cypher-shell.bat -u user -p password -a ip_address:port -d system --param "database => 'databasename'"