备份与恢复 #

一、备份概述 #

1.1 为什么需要备份 #

text
备份原因:
├── 硬件故障
├── 软件错误
├── 人为误操作
├── 数据损坏
├── 安全攻击
└── 合规要求

1.2 备份类型 #

类型 说明 特点
全量备份 完整数据库备份 数据完整,时间长
增量备份 只备份变化数据 时间短,恢复复杂
在线备份 运行时备份 不中断服务
离线备份 停止服务备份 数据一致性好

二、neo4j-admin工具 #

2.1 工具位置 #

text
位置:
├── Linux: $NEO4J_HOME/bin/neo4j-admin
├── Windows: %NEO4J_HOME%\bin\neo4j-admin.bat
└── Docker: docker exec <container> neo4j-admin

2.2 常用命令 #

bash
neo4j-admin backup --help
neo4j-admin restore --help
neo4j-admin database --help

三、离线备份 #

3.1 停止服务 #

bash
neo4j stop

3.2 复制数据目录 #

bash
cp -r $NEO4J_HOME/data /backup/neo4j_data_$(date +%Y%m%d)

3.3 备份特定数据库 #

bash
neo4j-admin database backup neo4j --to-path=/backup

3.4 启动服务 #

bash
neo4j start

四、在线备份 #

4.1 配置备份服务 #

在neo4j.conf中配置:

properties
server.backup.enabled=true
server.backup.listen_address=0.0.0.0:6362

4.2 执行备份 #

bash
neo4j-admin database backup neo4j --from=localhost:6362 --to-path=/backup

4.3 备份多个数据库 #

bash
neo4j-admin database backup neo4j,system --from=localhost:6362 --to-path=/backup

4.4 增量备份 #

bash
neo4j-admin database backup neo4j --from=localhost:6362 --to-path=/backup --fallback-to-full=false

五、恢复数据库 #

5.1 停止服务 #

bash
neo4j stop

5.2 恢复数据库 #

bash
neo4j-admin database restore neo4j --from-path=/backup/neo4j-2024-01-01

5.3 恢复到不同数据库名 #

bash
neo4j-admin database restore neo4j --from-path=/backup/neo4j-2024-01-01 --database=neo4j_restored

5.4 启动服务 #

bash
neo4j start

5.5 验证恢复 #

cypher
MATCH (n)
RETURN count(n) AS node_count

六、Docker环境备份 #

6.1 备份 #

bash
docker exec neo4j neo4j-admin database backup neo4j --to-path=/backups
docker cp neo4j:/backups ./local_backup

6.2 恢复 #

bash
docker cp ./local_backup neo4j:/backups
docker exec neo4j neo4j-admin database restore neo4j --from-path=/backups/neo4j-2024-01-01
docker restart neo4j

七、导出和导入 #

7.1 导出为文件 #

bash
neo4j-admin database dump neo4j --to-path=/backup

7.2 导入文件 #

bash
neo4j-admin database load neo4j --from-path=/backup/neo4j.dump

7.3 导出特定数据库 #

bash
neo4j-admin database dump mydb --to-path=/backup/mydb.dump

7.4 导入到新数据库 #

bash
neo4j-admin database load mydb_restored --from-path=/backup/mydb.dump

八、Cypher脚本备份 #

8.1 导出节点 #

cypher
CALL apoc.export.cypher.all('/backup/nodes.cypher', {format: 'cypher-shell'})

8.2 导出特定标签 #

cypher
MATCH (p:Person)
WITH collect(p) AS persons
CALL apoc.export.cypher.data(persons, [], '/backup/persons.cypher', {})
YIELD file, nodes, relationships
RETURN file, nodes, relationships

8.3 导出JSON #

cypher
CALL apoc.export.json.all('/backup/data.json', {})

8.4 导出CSV #

cypher
MATCH (p:Person)
RETURN p.name, p.age

九、备份策略 #

9.1 备份计划 #

text
建议:
├── 每日增量备份
├── 每周全量备份
├── 每月归档备份
├── 异地备份存储
└── 定期测试恢复

9.2 备份脚本 #

bash
#!/bin/bash

BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
NEO4J_HOME="/opt/neo4j"

$NEO4J_HOME/bin/neo4j-admin database backup neo4j --from=localhost:6362 --to-path=$BACKUP_DIR/$DATE

find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;

echo "Backup completed: $BACKUP_DIR/$DATE"

9.3 自动化备份 #

使用cron定时执行:

bash
0 2 * * * /opt/scripts/neo4j_backup.sh

十、恢复策略 #

10.1 恢复流程 #

text
流程:
├── 评估数据丢失范围
├── 选择合适的备份点
├── 停止Neo4j服务
├── 执行恢复操作
├── 验证数据完整性
├── 重启服务
└── 监控运行状态

10.2 部分恢复 #

cypher
LOAD CSV WITH HEADERS FROM 'file:///recovery_data.csv' AS row
MERGE (p:Person {id: row.id})
SET p += {name: row.name, age: toInteger(row.age)}

10.3 时间点恢复 #

使用事务日志进行时间点恢复:

bash
neo4j-admin database restore neo4j --from-path=/backup/neo4j --transaction-log-recovery

十一、备份最佳实践 #

11.1 存储建议 #

text
建议:
├── 使用专用备份存储
├── 异地备份存储
├── 加密敏感数据
├── 保留多个备份版本
└── 定期清理过期备份

11.2 验证备份 #

bash
neo4j-admin database restore neo4j_test --from-path=/backup/neo4j-2024-01-01 --database=neo4j_test

11.3 监控备份 #

text
监控项:
├── 备份是否成功
├── 备份文件大小
├── 备份时间
├── 存储空间使用
└── 恢复测试结果

十二、实际应用示例 #

12.1 生产环境备份脚本 #

bash
#!/bin/bash

NEO4J_HOME="/opt/neo4j"
BACKUP_DIR="/backup/neo4j"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/neo4j_backup.log"

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}

log "Starting backup..."

mkdir -p $BACKUP_DIR/$DATE

$NEO4J_HOME/bin/neo4j-admin database backup neo4j --from=localhost:6362 --to-path=$BACKUP_DIR/$DATE

if [ $? -eq 0 ]; then
    log "Backup completed successfully"
else
    log "Backup failed"
    exit 1
fi

find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;

log "Old backups cleaned"

12.2 灾难恢复流程 #

text
步骤:
1. 评估灾难情况
2. 准备恢复环境
3. 从异地获取备份
4. 执行恢复操作
5. 验证数据完整性
6. 切换服务
7. 监控运行状态

十三、总结 #

备份与恢复要点:

操作 命令 说明
离线备份 neo4j-admin database backup 离线备份
在线备份 neo4j-admin database backup --from 在线备份
恢复 neo4j-admin database restore 恢复数据库
导出 neo4j-admin database dump 导出为文件
导入 neo4j-admin database load 导入文件

最佳实践:

  1. 制定备份策略
  2. 定期执行备份
  3. 异地存储备份
  4. 定期测试恢复
  5. 监控备份状态

下一步,让我们学习性能优化!

最后更新:2026-03-27