【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
相关推荐
!!!5251 小时前
华为云镜像加速器
docker·容器·华为云
xidianjiapei0012 小时前
Kubernetes的Ingress 资源是什么?
云原生·容器·kubernetes
sszdzq4 小时前
Docker
运维·docker·容器
dmy4 小时前
docker 快速构建开发环境
后端·docker·容器
土豆沒加5 小时前
K8S的Dashboard登录及验证
云原生·容器·kubernetes
终端行者7 小时前
kubernetes1.28部署mysql5.7主从同步,使用Nfs制作持久卷存储,适用于centos7/9操作系统,
数据库·容器·kubernetes
2401_897930067 小时前
linux系统如何配置host.docker.internal
linux·docker·eureka
亲持红叶12 小时前
open-webui安装
docker·open-webui
伪装成塔的小兵12 小时前
Windows使用docker部署fastgpt出现的一些问题
windows·docker·容器·oneapi·fastgpt
转身後 默落15 小时前
11.Docker 之分布式仓库 Harbor
分布式·docker·容器