【Neo4J】neo4j docker容器下的备份与恢复

文章目录

  • [一. 官网说明](#一. 官网说明)
    • [1. 操作说明](#1. 操作说明)
    • [2. 注意事项](#2. 注意事项)
  • [二. docker 容器化操作](#二. docker 容器化操作)

一. 官网说明

https://neo4j.com/docs/operations-manual/current/docker/dump-load/

1. 操作说明

  1. 确定备份工具
    • 使用 Neo4j 提供的 neo4j-admin 工具
    • 此工具适用于 Neo4j 4.x 版本,可用来创建数据库的完整备份。
  2. 逐个备份所有数据库
    • Neo4j 支持多数据库架构,每个数据库需要单独备份。
    • 通过运行多个命令依次备份每个数据库。
  3. 检查备份
    • 验证备份是否成功,检查备份目录中的内容确保所有数据库都已备份。

2. 注意事项

  • 备份目录的存储空间
    • 确保目标目录有足够的存储空间容纳所有备份文件。
  • 数据库的一致性
    • 在备份期间,建议不要进行写操作,以避免数据不一致。
  • 备份权限
    • 运行备份命令的用户需要具有访问 Neo4j 安装目录和目标备份目录的权限。

二. docker 容器化操作

导出和导入时都需要停止容器,因为正在启动的容器不允许操作,如下操作日志:

复制代码
neo4j-admin database dump --to-path=/neo4j/backup/ neo4j

# neo4j-admin database dump --to-path=/neo4j/backup/ neo4j
2024-12-11 13:24:49.126+0000 INFO  [o.n.c.d.DumpCommand] Starting dump of database 'neo4j'
2024-12-11 13:24:49.146+0000 ERROR [o.n.c.d.DumpCommand] Failed to dump database 'neo4j': The database is in use. Stop database 'neo4j' and try again.
2024-12-11 13:24:49.148+0000 ERROR [o.n.c.d.DumpCommand] Dump failed for databases: 'neo4j'
Dump failed for databases: 'neo4j'
Run with '--verbose' for a more detailed error message.

也就是说我们无法在容器内进行操作,需要停止容器后进行备份,恢复

1. 导出(备份)

停止容器

首先停止要导出的neo4j数据库,在docker compose文件所在位置下执行

shell 复制代码
docker compose  stop neo4j


[+] Stopping 1/1
 ✔ Container neo4j  Stopped   

执行备份

在docker compose文件同级目录下执行

bash 复制代码
docker run --interactive --tty --rm \
   --volume=./neo4j/data:/data \
   --volume=./neo4j/data/backup:/neo4j/backup/ \
   neo4j \
neo4j-admin database dump neo4j --to-path=/neo4j/backup/



# 如下日志
neo4j-admin database dump neo4j --to-path=/neo4j/backup/
2024-12-11 13:01:51.864+0000 INFO  [o.n.c.d.DumpCommand] Starting dump of database 'neo4j'
Done: 36 files, 257.9MiB processed in 0.281 seconds.
2024-12-11 13:01:52.449+0000 INFO  [o.n.c.d.DumpCommand] Dump completed successfully

部分命令解释:

shell 复制代码
### `--rm`
容器停止后自动删除,避免占磁盘空间。
### `-v ./neo4j/data/backup:/neo4j/backup/ `
将宿主机的 `/data/neo4j` 目录挂载到容器内的 `/neo4j/backup/` 目录,实现数据共享与持久化。

### `neo4j-admin database dump neo4j --to-path=/neo4j/backup/`
在容器内用 `neo4j-admin` 工具备份名为 `neo4j` 的数据库,备份文件存到容器内 `/neo4j/backup/` 目录(实际会存到宿主机对应挂载目录)。 

2. 导入(恢复)

停止容器(如果未停止)

首先停止要导入的neo4j数据库,在docker compose文件所在位置下执行

shell 复制代码
docker compose stop  neo4j

执行导入

bash 复制代码
docker run -it \
    --rm \
    -v ./neo4j/data/backup:/neo4j/backup/ \
    neo4j:latest \
    neo4j-admin database load --from-path=/neo4j/backup/ neo4j 
# 如果数据库存在会报如下错误
Failed to load database 'neo4j': Database already exists: neo4j
Load failed for databases: 'neo4j'
Load failed for databases: 'neo4j'
Run with '--verbose' for a more detailed error message.

强制导入(谨慎操作)

bash 复制代码
docker run -it \
    --rm \
    -v ./neo4j/data/backup:/neo4j/backup/ \
    neo4j:latest \
    neo4j-admin database load --from-path=/neo4j/backup/ neo4j --overwrite-destination=true

Done: 36 files, 257.9MiB processed in 0.209 seconds.

部分参数说明:

bash 复制代码
### `--rm`
容器停止后自动删除,节省磁盘空间。

### `-v./neo4j/data/backup:/neo4j/backup/`
将宿主机的 `./neo4j/data/backup` 目录挂载到容器内 `/neo4j/backup/` 目录,实现数据共享与持久化。

### `neo4j:latest`
指定运行Neo4j的最新版本镜像。

### `neo4j-admin database load --from-path=/neo4j/backup/ neo4j --overwrite-destination=true`
在容器内用 `neo4j-admin` 工具,从 `/neo4j/backup/` 路径(对应宿主机相关目录)加载备份数据到名为 `neo4j` 的数据库,`--overwrite-destination=true` 表示覆盖原有数据库

3. 启动容器

bash 复制代码
docker compose start neo4j
相关推荐
Johny_Zhao3 小时前
Docker + CentOS 部署 Zookeeper 集群 + Kubernetes Operator 自动化运维方案
linux·网络安全·docker·信息安全·zookeeper·kubernetes·云计算·系统运维
zwjapple4 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
代码老y6 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
DuelCode7 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
杨浦老苏11 小时前
开源服务运行监控工具Lunalytics
docker·群晖·网站监控
呆萌的代Ma17 小时前
解决Mac上的老版本docker desktop 无法启动/启动后一直转圈/无法登陆账号的问题
macos·docker·eureka
feilieren17 小时前
Docker 安装 Elasticsearch 9
运维·elasticsearch·docker·es
KaiwuDB18 小时前
使用Docker实现KWDB数据库的快速部署与配置
数据库·docker
cleble19 小时前
(转)使用DockerCompose部署微服务
docker
朱杰jjj21 小时前
Docker容器中无法使用vim、vi命令处理
docker·容器·vim