Skip to content

使用 neo4j-admin 备份

备份命令语法

基本语法

bash
neo4j-admin backup [--help] [--backup-dir=<backup-directory>] [--name=<backup-name>] [--from=<address>] [--protocol=<any|catchup|common>] [--incremental-from=<backup>] [--pagecache=<size>] [--check-consistency[=true|false]] [--cc-graph[=true|false]] [--cc-indexes[=true|false]] [--cc-label-scan-store[=true|false]] [--cc-property-owners[=true|false]] [--cc-progress[=true|false]] [--verbose[=true|false]]

常用参数说明

参数描述默认值
--backup-dir备份文件存储目录必填参数
--name备份名称,将创建一个以该名称命名的子目录必填参数
--from要备份的 Neo4j 实例地址,格式为 hostname:portlocalhost:6362
--protocol使用的备份协议any
--incremental-from增量备份的基础备份目录无(默认执行全量备份)
--pagecache备份过程中使用的页面缓存大小8m
--check-consistency是否在备份后检查一致性false
--verbose是否输出详细日志false

全量备份

本地全量备份

备份本地 Neo4j 实例:

bash
# 备份本地 Neo4j 实例到 /backup/neo4j 目录,备份名称为 full-backup-20260115
neo4j-admin backup --backup-dir=/backup/neo4j --name=full-backup-20260115

远程全量备份

备份远程 Neo4j 实例:

bash
# 备份远程 Neo4j 实例(neo4j-server:6362)到 /backup/neo4j 目录,备份名称为 remote-full-backup-20260115
neo4j-admin backup --backup-dir=/backup/neo4j --name=remote-full-backup-20260115 --from=neo4j-server:6362

带一致性检查的全量备份

备份后检查数据库一致性:

bash
# 备份本地 Neo4j 实例并检查一致性
neo4j-admin backup --backup-dir=/backup/neo4j --name=full-backup-20260115 --check-consistency

增量备份

增量备份必须基于之前的全量备份或增量备份:

基于全量备份的增量备份

bash
# 基于之前的全量备份创建增量备份
neo4j-admin backup --backup-dir=/backup/neo4j --name=incr-backup-20260115-1200 --incremental-from=/backup/neo4j/full-backup-20260115

基于增量备份的增量备份

bash
# 基于之前的增量备份创建新的增量备份
neo4j-admin backup --backup-dir=/backup/neo4j --name=incr-backup-20260115-1800 --incremental-from=/backup/neo4j/incr-backup-20260115-1200

备份目录结构

使用 neo4j-admin 备份后,会在指定的备份目录中创建以下结构:

目录结构说明

  • /backup/neo4j/:备份根目录,所有备份都存储在此目录下
  • full-backup-20260115/:全量备份目录,包含完整的数据库文件
  • incr-backup-20260115-1200/:增量备份目录,仅包含自上次备份以来更改的数据
  • backups/backup.info:备份元数据文件,记录备份的版本、时间、状态等信息
  • neostore.*.db:各种数据存储文件,包含节点、关系、属性等图数据

备份信息文件

每个备份目录中都包含一个 backups/backup.info 文件,记录备份的元数据信息:

# backup.info 文件内容示例
backup_version=1
store_version=SF4.4.0
upgrade=true
database=neo4j
start_time=2026-01-15T00:00:00+00:00
end_time=2026-01-15T00:05:30+00:00
consistency_check=false
incremental=false
from=localhost:6362
protocol=catchup
pagecache=8m

备份管理

查看备份列表

bash
# 列出所有备份目录
ls -la /backup/neo4j/

# 查看备份信息
cat /backup/neo4j/full-backup-20260115/backups/backup.info

删除旧备份

bash
# 删除指定备份
rm -rf /backup/neo4j/old-backup-20251231

# 根据保留策略删除旧备份(示例:保留最近7天的备份)
find /backup/neo4j/ -type d -mtime +7 -name "*-backup-*" -exec rm -rf {} \;

压缩备份

bash
# 压缩备份目录
tar -czf /backup/neo4j/full-backup-20260115.tar.gz /backup/neo4j/full-backup-20260115

# 压缩所有增量备份
tar -czf /backup/neo4j/incr-backups-20260115.tar.gz /backup/neo4j/incr-backup-20260115-*

备份最佳实践

1. 备份前准备

  • 检查数据库状态:确保数据库运行正常,没有错误
  • 确认备份目录存在:提前创建备份目录,确保有足够的存储空间
  • 检查权限:确保运行 neo4j-admin 命令的用户有足够的权限访问备份目录
  • 监控系统资源:确保系统有足够的 CPU、内存和磁盘 I/O 用于备份

2. 备份过程优化

  • 选择合适的备份时间:在业务低峰期执行备份,减少对系统性能的影响
  • 使用高速存储设备:备份目录应位于高速存储设备上,如 SSD
  • 适当调整页面缓存:根据系统内存情况调整 --pagecache 参数
  • 启用一致性检查:定期执行带一致性检查的备份,确保备份的完整性

3. 备份后验证

  • 检查备份目录结构:确保所有必要的文件都已备份
  • 验证备份信息文件:检查 backup.info 文件,确认备份成功完成
  • 定期测试恢复:定期从备份恢复数据库,验证备份的可用性
  • 检查备份大小:与数据库大小进行比较,确保备份完整

4. 备份安全性

  • 加密备份数据:对备份文件进行加密,防止数据泄露
  • 限制备份访问权限:只有授权人员才能访问备份目录
  • 异地存储备份:将备份复制到异地存储,防止本地灾难
  • 定期轮换备份:根据保留策略定期删除旧备份

集群环境下的备份

1. Causal Clustering 备份

在 Causal Clustering 环境中,可以在任何核心节点上执行备份:

bash
# 备份 Causal Clustering 核心节点
neo4j-admin backup --backup-dir=/backup/neo4j --name=cluster-backup-20260115 --from=core1:6362

2. HA Cluster 备份

在 HA Cluster 环境中,应该在主节点或从节点上执行备份:

bash
# 备份 HA Cluster 主节点
neo4j-admin backup --backup-dir=/backup/neo4j --name=ha-backup-20260115 --from=master:6362

3. 集群备份注意事项

  • 避免同时备份所有节点:同时备份多个节点会增加集群负载,影响性能
  • 记录备份节点信息:记录每个备份对应的节点信息,便于恢复
  • 测试集群恢复:定期测试基于备份的集群恢复流程
  • 监控备份过程:监控备份过程中的集群状态,及时发现问题

常见问题与解决方案

1. 备份失败,提示连接拒绝

问题

Backup failed: Could not connect to the database. Please check the address and try again.

解决方案

  • 检查目标 Neo4j 实例是否正在运行
  • 检查目标实例的 dbms.backup.enabled 配置是否为 true
  • 检查目标实例的 dbms.backup.listen_address 配置是否正确
  • 检查网络连接和防火墙设置

2. 备份失败,提示权限不足

问题

Backup failed: Permission denied when trying to create backup directory.

解决方案

  • 确保运行 neo4j-admin 命令的用户有足够的权限访问备份目录
  • 检查备份目录的权限设置
  • 尝试使用 sudo 或管理员权限运行命令

3. 备份失败,提示存储空间不足

问题

Backup failed: No space left on device.

解决方案

  • 清理备份目录,删除旧备份
  • 扩展备份存储设备
  • 考虑使用增量备份减少存储空间需求

4. 增量备份失败,提示基础备份不存在

问题

Backup failed: The incremental-from directory does not contain a valid backup.

解决方案

  • 检查 --incremental-from 参数指定的目录是否存在
  • 检查指定的目录是否是有效的 Neo4j 备份
  • 确保基础备份和增量备份使用相同的备份协议

5. 备份速度慢

解决方案

  • 使用高速存储设备
  • 调整 --pagecache 参数,增加页面缓存大小
  • 在业务低峰期执行备份
  • 关闭不必要的服务,减少系统负载

自动化备份脚本

简单的全量备份脚本

bash
#!/bin/bash

# 备份配置
BACKUP_DIR="/backup/neo4j"
NEO4J_HOME="/var/lib/neo4j"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="full-backup-${DATE}"

# 创建备份目录
mkdir -p ${BACKUP_DIR}

# 执行备份
${NEO4J_HOME}/bin/neo4j-admin backup --backup-dir=${BACKUP_DIR} --name=${BACKUP_NAME} --pagecache=4g

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "Backup successful: ${BACKUP_NAME}"
    # 记录备份信息
    echo "$(date) - Backup successful: ${BACKUP_NAME}" >> ${BACKUP_DIR}/backup.log
else
    echo "Backup failed: ${BACKUP_NAME}"
    echo "$(date) - Backup failed: ${BACKUP_NAME}" >> ${BACKUP_DIR}/backup.log
    exit 1
fi

# 删除7天前的备份
find ${BACKUP_DIR} -type d -name "full-backup-*" -mtime +7 -exec rm -rf {} \;

全量+增量备份脚本

bash
#!/bin/bash

# 备份配置
BACKUP_DIR="/backup/neo4j"
NEO4J_HOME="/var/lib/neo4j"
DATE=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p ${BACKUP_DIR}

# 检查是否需要执行全量备份(每天凌晨2点执行全量备份)
HOUR=$(date +%H)
if [ ${HOUR} -eq 02 ]; then
    # 执行全量备份
    BACKUP_NAME="full-backup-${DATE}"
    ${NEO4J_HOME}/bin/neo4j-admin backup --backup-dir=${BACKUP_DIR} --name=${BACKUP_NAME} --pagecache=4g
    
    if [ $? -eq 0 ]; then
        echo "Full backup successful: ${BACKUP_NAME}"
        echo "$(date) - Full backup successful: ${BACKUP_NAME}" >> ${BACKUP_DIR}/backup.log
    else
        echo "Full backup failed: ${BACKUP_NAME}"
        echo "$(date) - Full backup failed: ${BACKUP_NAME}" >> ${BACKUP_DIR}/backup.log
        exit 1
    fi
else
    # 执行增量备份
    # 查找最近的全量备份
    LATEST_FULL_BACKUP=$(ls -td ${BACKUP_DIR}/full-backup-* | head -1)
    if [ -z "${LATEST_FULL_BACKUP}" ]; then
        echo "No full backup found, please run a full backup first"
        exit 1
    fi
    
    BACKUP_NAME="incr-backup-${DATE}"
    ${NEO4J_HOME}/bin/neo4j-admin backup --backup-dir=${BACKUP_DIR} --name=${BACKUP_NAME} --incremental-from=${LATEST_FULL_BACKUP} --pagecache=2g
    
    if [ $? -eq 0 ]; then
        echo "Incremental backup successful: ${BACKUP_NAME}"
        echo "$(date) - Incremental backup successful: ${BACKUP_NAME}" >> ${BACKUP_DIR}/backup.log
    else
        echo "Incremental backup failed: ${BACKUP_NAME}"
        echo "$(date) - Incremental backup failed: ${BACKUP_NAME}" >> ${BACKUP_DIR}/backup.log
        exit 1
    fi
fi

# 保留策略:保留最近7天的全量备份和对应的增量备份
find ${BACKUP_DIR} -type d -name "full-backup-*" -mtime +7 -exec rm -rf {} \;
find ${BACKUP_DIR} -type d -name "incr-backup-*" -mtime +7 -exec rm -rf {} \;

常见问题(FAQ)

Q1: neo4j-admin 备份支持哪些 Neo4j 版本?

A1: neo4j-admin 备份功能支持 Neo4j 3.0 及以上版本,不同版本的命令参数可能有所差异。建议查看对应版本的官方文档。

Q2: 可以在数据库运行时执行备份吗?

A2: 是的,neo4j-admin backup 命令支持在线备份,可以在数据库运行时执行,不需要停止数据库服务。

Q3: 备份会影响数据库性能吗?

A3: 备份过程会消耗系统资源,包括 CPU、内存和磁盘 I/O,可能会影响数据库性能。建议在业务低峰期执行备份。

Q4: 如何恢复从 neo4j-admin 备份的数据库?

A4: 使用 neo4j-admin restore 命令从备份恢复数据库,具体用法请参考「使用 neo4j-admin 恢复」文档。

Q5: 可以备份特定数据库吗?

A5: 在 Neo4j 4.0+ 版本中,支持多数据库,可以使用 --database 参数指定要备份的数据库名称。

Q6: 备份文件可以跨平台恢复吗?

A6: 是的,备份文件可以在不同平台之间恢复,但需要确保使用相同或兼容的 Neo4j 版本。

Q7: 如何监控备份进度?

A7: 可以使用 --verbose 参数启用详细日志,或监控系统资源使用情况来了解备份进度。

Q8: 可以将备份存储到网络共享目录吗?

A8: 是的,可以将备份目录设置为网络共享目录,但需要确保有足够的权限和网络带宽。