知识库

为了从备份中恢复而停止 Neo4j docker 镜像

neo4j Docker 安装 中,neo4j-admin restore 需要先停止 neo4j 服务,因为无法在运行中的数据库上进行恢复。随后,作为 Docker 镜像运行时,停止 neo4j 服务器可以使用 Ctrl-C(在 Docker 终端内)或在另一个终端窗口中使用 docker stop <container id>。然而,这会终止容器本身,因为容器只是 neo4j 应用的实例。在这种情况下,使用 ./neo4j-admin restore 进行恢复并不可行。

以下是在 Docker 中进行 neo4j-admin restore 的变通方法

  1. 通过执行 docker ps 获取容器名称。

  2. 通过执行 docker exec --interactive --tty <container id> bin/neo4j-admin backup 来备份 neo4j,并将 <container id> 替换为上面获取的容器 ID。

  3. 在恢复之前,需要先停止 neo4j 实例。如果在与 Docker 进程相同的终端中执行操作,使用 Ctrl-C 即可停止 neo4j Docker 容器进程。否则,如果创建容器时使用了 --detachCtrl-C 将不起作用,此时需要在另一个终端中通过 Docker 命令停止容器。可以在另一个终端执行 docker stop <container id> 来完成此操作。

  4. graph.db 文件夹替换为之前备份中得到的文件夹。

  5. 启动容器,它应当使用已恢复的数据库启动。

$ docker run \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j/data:/data \
    --volume=$HOME/neo4j/logs:/logs \
    neo4j:3.3.0

或者,可以在启动选项中指定 --dbms.active_database=new.db,如下面所示。

$ docker run \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j/data:/data \
    --volume=$HOME/neo4j/logs:/logs \
    --dbms.active_database=new.db
    neo4j:3.3.0`

以下是测试过程中注意到的几点

  • 在撰写本知识库时,neo4j Community Edition 不支持在线备份。企业版可以使用 --neo4j:3.3.0-enterprise 替代默认安装 Community Edition 的 --neo4j:3.3.0 来安装。

  • 对于 Docker 部署,在容器启动时指定的 /data/conf/logs 目录会持久化到磁盘。在运行中的实例上替换 graph.db 将仍然显示未恢复的数据库,除非重新启动 neo4j 实例。

© . This site is unofficial and not affiliated with Neo4j, Inc.