备份和恢复 Neo4j 数据库(在线)

Neo4j 备份和恢复命令可以在本地运行,以备份和恢复活动数据库。

您还可以获取一个 neo4j-admin 镜像,该镜像可以在专用机器上运行,前提是根据现有的企业许可协议。

如果 Neo4j(单实例或 Neo4j 集群的任何成员)正在 Docker 容器内运行,您可以使用 docker exec 从容器内部调用 neo4-admin 并备份数据库。

使用 docker exec 备份数据库

要备份数据库,您必须首先将主机备份文件夹挂载到容器中。由于 Docker 不允许向正在运行的容器添加新的挂载,因此您必须在启动容器时执行此操作。

示例 1. 将主机备份文件夹挂载到 Neo4j 容器的 docker run 命令。
docker run --name <container name> \
    --detach \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j-enterprise/data:/data \ (1)
    --volume=$HOME/neo4j-enterprise/backups:/backups \ (2)
    --user="$(id -u):$(id -g)" \
    --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \ (3)
    --env NEO4J_server_backup_enabled=true \ (4)
    neo4j:2025.05.0-enterprise
1 包含您要备份的数据库的卷。
2 将用于数据库备份的卷。
3 接受 Neo4j 企业版许可协议的环境变量。
4 启用在线备份的环境变量。
示例 2. 使用 docker exec 调用 neo4j-admin database backup 来备份在线数据库
docker exec --interactive --tty <container name> neo4j-admin database backup --to-path=/backups <database name>

有关 neo4j-admin database backup 语法和选项的更多信息,请参阅备份在线数据库

使用 neo4j-admin 镜像备份数据库

要执行备份,集群至少需要一个启用备份的服务器,并且备份侦听地址端口已设置并暴露。端口在 Docker 容器启动后无法暴露,因此这必须在启动容器时完成。

示例 3. 启动配置为备份的数据库的 docker run 命令。
docker run \
    --detach \
    --publish=7474:7474 \
    --publish=7687:7687 \
    --publish=6362:6362 \ (1)
    --volume=$HOME/neo4j-enterprise/data:/data \ (2)
    --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \ (3)
    --env NEO4J_server_backup_enabled=true \ (4)
    --env NEO4J_server_backup_listen__address=0.0.0.0:6362 \ (5)
    neo4j:2025.05.0-enterprise
1 在 5 中定义的 server.backup.listen_address 端口。
2 包含您要备份的数据库的卷。
3 接受 Neo4j 企业版许可协议的环境变量。
4 启用在线备份的环境变量。
5 设置 server.backup.listen_address 的环境变量。

一旦您有一个启用了备份的集群节点,就可以使用 neo4j/neo4j-admin:2025.05.0-enterprise Docker 镜像来备份数据库。

示例 4. 调用 neo4j-admin Docker 镜像来备份您的数据库。
docker run --interactive --tty --rm \
   --volume=$HOME/neo4j-enterprise/backups:/backups \  (1)
   --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \ (2)
   neo4j/neo4j-admin:2025.05.0-enterprise \
      neo4j-admin database backup <database name> \
         --to-path=/backups \
         --from=<backup node IP address>:6362 (3)
1 将用于备份数据库文件的卷。
2 接受 Neo4j 企业版许可协议的环境变量。
3 备份集群节点的 IP 地址和 server.backup.listen_address 端口。

使用 docker exec 恢复数据库

以下是在运行中的 Neo4j 实例上,在已停止的数据库中恢复数据库备份的示例。

示例 5. 创建用于恢复数据库备份的容器的 docker run 命令。
docker run --name <container name> \
    --detach \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j-enterprise/data:/data \ (1)
    --volume=$HOME/neo4j-enterprise/backups:/backups \ (2)
    --user="$(id -u):$(id -g)" \
    --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \ (3)
    neo4j:2025.05.0-enterprise
1 包含所有数据库的卷。
2 包含数据库备份的卷。
3 接受 Neo4j 企业版许可协议的环境变量。
示例 6. 调用 cypher-shell 停止要用于备份恢复的数据库。
docker exec -it <containerID/name> cypher-shell -u neo4j -p <my-password> -d system "stop database <database name>;"
示例 7. 调用 neo4j-admin database restore 来恢复数据库备份。
docker exec --interactive --tty <containerID/name> neo4j-admin database restore --from=/backups/<databasename>-<timestamp>.backup --overwrite-destination <database name>

使用 neo4j-admin 镜像恢复数据库

neo4j-admin database restore 操作无法远程执行,因为它需要访问 Neo4j 的 /data 文件夹。因此,在恢复之前,必须将备份文件复制到新机器上,并且 neo4j-admin Docker 镜像必须在要恢复的数据库所在的同一机器上运行。

示例 8. 创建用于恢复数据库备份的容器的 docker run 命令。
docker run --name <container name> \
    --detach \
    --volume=$HOME/neo4j-enterprise/data:/data \ (1)
    --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \ (2)
    neo4j:2025.05.0-enterprise
1 包含或将包含所有数据库数据的卷。
2 环境变量接受 Neo4j 企业版许可协议。
示例 9. 停止旧数据库,然后使用 neo4j/neo4j-admin:2025.05.0-enterprise 恢复备份数据库。最后再次启动包含新数据的数据库。
docker exec -it <containerID/name> cypher-shell -u neo4j -p <my-password> -d system "stop database <database name>;"
docker run --interactive --tty --rm \
   --volume=$HOME/neo4j-enterprise/data:/data \ (1)
   --volume=$HOME/neo4j-enterprise/backups:/backups \  (2)
   --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \ (3)
   neo4j/neo4j-admin:{neo4j-version-exact}-enterprise \
      neo4j-admin database restore \
         --from=/backups/<databasename>-<timestamp>.backup \
         --overwrite-destination \
          <database name> \
docker exec -it <containerID/name> cypher-shell -u neo4j -p <my-password> -d system "start database <database name>;"
1 包含或将包含所有数据库数据的卷。这必须与 Neo4j DBMS 容器正在使用的数据文件夹相同。
2 包含数据库备份的卷。
3 接受 Neo4j 企业版许可协议的环境变量。

有关 neo4j-admin database restore 语法和选项的更多信息,请参阅恢复数据库备份

最后,您可以使用 Cypher Shell 工具来验证您的数据是否已恢复。

© . All rights reserved.