备份与恢复 #
一、备份概述 #
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 | 导入文件 |
最佳实践:
- 制定备份策略
- 定期执行备份
- 异地存储备份
- 定期测试恢复
- 监控备份状态
下一步,让我们学习性能优化!
最后更新:2026-03-27