备份在线数据库
请记住仔细规划备份,并备份您的每个数据库,包括 请注意,不允许备份数据库别名,只能备份物理数据库。 |
命令
可以使用 neo4j-admin
的 backup
命令在在线模式下备份 Neo4j 数据库。该命令必须以 neo4j
用户身份调用,以确保适当的文件权限。
最佳实践(但非强制要求)是在与数据库位于同一网络上但不是集群一部分的服务器上执行备份。您应该在该机器上安装 Neo4j 以使 neo4j-admin
命令可用。该机器被称为备份客户端。
备份工件
每次运行 neo4j-admin database backup
命令时,都会为每个数据库生成一个备份工件文件。备份工件文件是一个不可变文件,包含给定数据库的备份数据以及一些元数据,例如数据库名称和 ID、备份时间、最低/最高事务 ID 等。
备份工件有两种类型
-
包含整个数据库存储的完整备份,或
-
包含要应用于完整备份工件中数据库存储的事务日志的增量备份。
用法
neo4j-admin database backup
命令可用于从运行中的 Neo4j Enterprise 服务器执行在线完整备份或增量备份。生成的增量备份工件包含事务日志,这些日志在恢复备份链时可以重放并应用于完整备份工件中包含的存储。
Neo4j 的备份服务必须事先在服务器上配置好。该命令可以在本地和远程运行。但是,它会占用大量的资源,例如内存和 CPU。因此,建议在单独的专用机器上执行备份。neo4j-admin database backup
命令还支持 SSL/TLS。有关更多信息,请参阅在线备份配置。
Neo4j Aura 不支持 |
语法
neo4j-admin database backup [-h] [--expand-commands] [--prefer-diff-as-parent] [--verbose]
[--compress[=true|false]] [--keep-failed[=true|false]]
[--parallel-recovery[=true|false]] [--additional-config=<file>]
[--include-metadata=none|all|users|roles] [--inspect-path=<path>]
[--pagecache=<size>] [--temp-path=<path>] [--to-path=<path>]
[--type=<type>] [--from=<host:port>[,<host:port>...]]... [<database>...]
参数
参数 | 描述 | 默认值 |
---|---|---|
|
要备份的远程数据库名称。支持双引号内的 globbing 模式,例如 "data*"。(除非使用 |
|
如果 <database> 是 "*", |
选项
选项 | 描述 | 默认值 | ||
---|---|---|---|---|
|
包含附加配置的配置文件。 |
|||
|
请求备份工件进行压缩。压缩可以使备份工件的尺寸缩小多倍,但具体的缩小程度取决于许多因素,包括数据库格式和存储的数据类型。如果禁用,生成的工件大小将近似等于备份数据库的大小。备份操作的速度受压缩影响,但哪种更快取决于 CPU 和存储的相对性能。如果备份速度很重要,请考虑评估两种选项 — 启用压缩和禁用压缩。 |
|
||
|
允许在配置值评估中进行命令扩展。 |
|||
|
以逗号分隔的 Neo4j 实例主机和端口列表,将按顺序尝试每个实例。 |
|||
|
显示此帮助消息并退出。 |
|||
|
在文件中包含元数据。这不能用于备份
因此,不具有数据库相关权限的 建议使用 |
|
||
|
列出并显示备份工件的元数据。接受文件夹或文件。 |
|||
|
请求保留失败的备份以供后续故障分析。如果启用,将保留一个包含失败备份数据库的目录。 |
|
||
|
用于备份过程的页面缓存大小。 |
|||
|
允许多个线程并行地将拉取的事务应用于备份。对于某些数据库和工作负载,这可能会显著缩短备份时间。注意:这是一个实验性选项。使用前请咨询 Neo4j 支持。 |
|
||
|
2025.04 版本引入 在执行增量备份时,优先使用最新的非空增量备份作为父级,而不是最新的备份。 |
|
||
|
提供一个临时空目录的路径,用于存储备份文件,直到命令完成。命令完成后,文件将被删除。 |
|||
|
存放备份的目录(除非使用 |
|||
|
要执行的备份类型。可能的值有: |
|
||
|
启用详细输出。 |
|||
1. 有关详细信息,请参阅Neo4j Admin 和 Neo4j CLI → 配置。 |
|
如果未设置 如果您未提供 因此,强烈建议在执行备份相关命令时提供 |
在线备份配置
检查点
请求完整备份时,总是会触发一个检查点。备份无法在检查点完成之前进行。
当服务器正在进行检查点时,备份作业不接收数据,这可能导致备份超时。要延长备份超时时间,请修改dbms.cluster.network.client_inactivity_timeout
设置,该设置限制了网络不活动时间。它控制了 catchup 协议的超时持续时间,该协议是包括备份在内的多个 catchup 过程的基础协议。
您还可以调整检查点设置或检查您的磁盘性能是否足以处理负载。有关更多信息,请参阅检查点 IOPS 限制。
要了解有关检查点的更多信息,请参阅数据库内部结构 → 检查点和日志修剪。
服务器配置
下表列出了与备份相关的基本服务器参数。请注意,默认情况下,备份服务已启用,但仅监听 localhost (127.0.0.1)。如果要从其他机器进行备份,则需要更改此设置。
参数名称 | 默认值 | 描述 |
---|---|---|
|
启用在线备份支持。 |
|
|
在线备份监听服务器。 |
内存配置
以下选项可用于配置分配给备份客户端的内存
-
配置备份的堆大小:
HEAP_SIZE
配置分配给备份进程的最大堆大小。这是通过在开始操作之前设置环境变量 HEAP_SIZE
来完成的。如果未指定,Java 虚拟机将根据服务器资源选择一个值。
-
配置备份的页面缓存:
页面缓存大小可以通过使用 neo4j-admin database backup
命令的 --pagecache
选项来配置。
您应该为 Neo4j 页面缓存分配尽可能多的内存,只要它满足以下约束条件: Neo4j 页面缓存 + 操作系统页面缓存 < 可用 RAM,其中 2 到 4GB 应专用于操作系统的页面缓存。 例如,如果您的当前数据库根据 debug.log 显示的 |
计算资源配置
- 事务日志文件
-
事务日志文件用于跟踪最近的更改,并根据提供的配置进行轮换和修剪。例如,设置
db.tx_log.rotation.retention_policy=3
文件可在备份中保留 3 个事务日志文件。由于恢复的服务器不需要所有已应用的事务日志文件,因此可以通过将文件大小减小到最低限度来进一步减少存储大小。这可以通过设置db.tx_log.rotation.size=1M
和db.tx_log.rotation.retention_policy=3
文件来完成。您可以使用--additional-config
参数覆盖 neo4j.conf 文件中的配置。手动删除事务日志可能导致备份损坏。
安全配置
使用 SSL 策略和防火墙保护您的备份网络通信,可防止数据遭到未经授权的入侵和泄漏。使用 neo4j-admin database backup
命令时,您可以将备份服务器配置为要求 SSL/TLS,并使备份客户端使用兼容的策略。有关如何在 Neo4j 中配置 SSL 的更多信息,请参阅SSL 框架。
备份服务器的配置应添加到 neo4j.conf 文件中,备份客户端的配置应添加到 neo4j-admin.conf 文件中。SSL 设置应在两者之间保持一致以确保兼容性。
默认备份端口是 6362,通过键 server.backup.listen_address
配置。SSL 配置策略的键为 dbms.ssl.policy.backup
。
例如,将以下内容添加到您的 neo4j.conf 和 neo4j-admin.conf 文件中
dbms.ssl.policy.backup.enabled=true
dbms.ssl.policy.backup.tls_versions=TLSv1.2
dbms.ssl.policy.backup.ciphers=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
dbms.ssl.policy.backup.client_auth=REQUIRE
Neo4j 还支持 TLSv1.3。要同时使用 TLSv1.2 和 TLSv1.3 版本,您必须指定每个版本要强制执行的密码套件。否则,Neo4j 可能会使用 JVM 中所有可能的密码套件,导致配置安全性降低。 有关 Neo4j 安全性建议的详细列表,请参阅安全清单。 |
确保没有外部访问 |
集群配置
在集群拓扑中,可以从任何托管要备份数据库的服务器进行备份,并且每个服务器都有两个可配置的端口能够提供备份服务。这些端口分别由 server.backup.listen_address
和 server.cluster.listen_address
配置。从功能上讲,它们对于备份是等效的,但将它们分开可以提供一些操作灵活性,而仅使用单个端口可以简化配置。通常建议选择辅助服务器作为备份服务器,因为在典型的集群部署中,它们的数量比主服务器更多。此外,由大型备份引起的辅助服务器上的性能问题不会影响主服务器的性能或冗余。如果辅助服务器不可用,则可以根据物理距离、带宽、性能和活跃度等因素选择主服务器。
使用 |
为避免从滞后的集群成员进行备份,您可以通过公开 Neo4j 指标或 Neo4j Browser 查看事务 ID。要在 Neo4j Browser 中查看最新处理的事务 ID(和其他指标),请在提示符下键入 |
示例
以下是如何对单个数据库和多个数据库执行备份的示例。目标目录 /mnt/backups/neo4j 必须在调用命令之前存在,并且数据库必须在线。
备份单个数据库
您不需要使用 --type
选项来指定备份类型。默认情况下,类型会根据现有备份自动确定。
bin/neo4j-admin database backup --to-path=/path/to/backups/neo4j neo4j
执行单个数据库的强制完整备份。
如果您想在多次增量备份后强制执行完整备份,可以使用 --type=full
选项。
bin/neo4j-admin database backup --type=full --to-path=/path/to/backups/neo4j neo4j
备份多个数据库
要备份与数据库模式匹配的多个数据库,您可以使用名称 globbing。例如,要备份三节点集群中所有以 n 开头的数据库,请运行
bin/neo4j-admin database backup --from=192.168.1.34:6362,192.168.1.35:6362,192.168.1.36:6362 --to-path=/mnt/backups/neo4j --pagecache=4G "n*"
备份数据库列表
要按名称备份多个数据库,您可以提供数据库名称列表。
neo4j-admin database backup --from=192.168.1.34:6362,192.168.1.35:6362,192.168.1.36:6362 --to-path=/mnt/backups/neo4j --pagecache=4G "test*" "neo4j"
将数据库备份到云存储
在 Neo4j 2025.03 中,引入了新的云集成设置,以更好地支持云生态系统中的部署和管理。有关详细信息,请参阅配置设置 → 云存储集成设置。
以下示例展示了如何使用 --to-path
选项将数据库备份到云存储桶。
Neo4j 使用 AWS SDK v2 调用 AWS 上的 API,使用 AWS URL。或者,您可以覆盖端点,以便 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 官方文档 — 将 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" ] } ] }
-
-
运行
neo4j-admin database backup
命令将您的数据库备份到 AWS S3 存储桶bin/neo4j-admin database backup --to-path=s3://myBucket/myDirectory/ 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 backup
命令将您的数据库备份到您的 Google 存储桶bin/neo4j-admin database backup --to-path=gs://myBucket/myDirectory/ mydatabase
-
确保您拥有 Azure 帐户、Azure 存储帐户和 Blob 容器。
-
您可以使用 Azure 门户创建存储帐户。
有关更多信息,请参阅 Azure 官方文档中的 创建存储帐户。 -
在 Azure 门户中创建 Blob 容器。
有关更多信息,请参阅 Azure 官方文档中的 快速入门:使用 Azure 门户上传、下载和列出 Blob。
-
-
按照 Azure 官方文档中的说明安装 Azure CLI — Azure 官方文档。
-
使用默认 Azure 凭据对 Azure 进行 neo4j 或 neo4j-admin 进程的身份验证。
有关更多信息,请参阅 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
-
运行
neo4j-admin database backup
命令将您的数据库备份到您的 Azure 容器bin/neo4j-admin database backup --to-path=azb://myStorageAccount/myContainer/myDirectory/ mydatabase
使用 --prefer-diff-as-parent
选项执行增量备份
默认情况下,增量备份(--type=DIFF
)使用目录中最新的非空备份(无论是完整备份还是增量备份)作为其父级。
--prefer-diff-as-parent
选项会更改此行为,强制备份作业使用最新的增量备份作为父级,即使存在更新的完整备份。
这种方法允许您为所有事务维护一个增量备份链,并可以恢复到任何时间点。如果没有此选项,则上次完整备份和先前增量备份之间的事务无法作为单个事务进行备份。
要使用 --prefer-diff-as-parent
选项,请将其设置为 true
。
以下示例涵盖了使用 --prefer-diff-as-parent
选项的不同场景。
假设您每小时向 neo4j
数据库写入 10 笔事务,但从 12:30 到 13:30 之间您不写入任何事务。
有一个备份作业每小时进行一次备份,每四小时进行一次完整备份。空备份没有事务,这意味着最低事务 ID 和最高事务 ID 都为零。
假设您有以下备份链
时间戳 | 备份名称 | 备份类型 | 最低事务 ID | 最高事务 ID |
---|---|---|---|---|
10:30 |
backup1 |
|
1 |
10 |
11:30 |
backup2 |
|
11 |
20 |
12:30 |
backup3 |
|
21 |
30 |
13:30 |
backup4 |
|
0 |
0 |
14:30 |
backup5 |
|
1 |
40 |
在 15:30,您执行以下备份命令
neo4j-admin database backup --from=<address:port> --to-path=<targetPath> --type=DIFF neo4j
结果将是
15:30 |
backup6 |
|
41 |
50 |
---|
结果意味着您已选择 backup5
作为您的增量 backup6
的父级,因为 backup5
是最新的非空备份。
但是,如果您使用 --prefer-diff-as-parent
选项执行以下命令
neo4j-admin database backup --from=<address:port> --to-path=<targetPath> --type=DIFF --prefer-diff-as-parent neo4j
结果将是
15:30 |
backup6 |
|
31 |
50 |
---|
在这种情况下,backup3
被选作父级,因为它是在最新的非空增量备份。
假设您每小时向 neo4j
数据库写入 10 笔事务并触发每小时完整备份。
时间戳 | 备份名称 | 备份类型 | 最低事务 ID | 最高事务 ID |
---|---|---|---|---|
10:30 |
backup1 |
|
1 |
10 |
11:30 |
backup2 |
|
11 |
20 |
在这种情况下,没有增量备份。因此,--prefer-diff-as-parent
选项不起作用,行为与默认行为相同。
neo4j-admin database backup \
--from=<address:port> --to-path=<targetPath> \
--type=DIFF --prefer-diff-as-parent \
neo4j
结果将是(带或不带 --prefer-diff-as-parent
选项)
12:30 |
backup3 |
|
21 |
30 |
---|