备份和恢复 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:5.25.1-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:5.25.1-enterprise
1 在 5 中定义的server.backup.listen_address端口。
2 包含要备份的数据库的卷。
3 接受 Neo4j 企业版许可协议的环境变量。
4 启用在线备份的环境变量。
5 设置server.backup.listen_address的环境变量。

一旦您启用了备份的集群节点,neo4j/neo4j-admin:5.25.1-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:5.25.1-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:5.25.1-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:5.25.1-enterprise
1 包含或将包含所有数据库数据的卷。
2 环境变量接受 Neo4j 企业版许可协议。
示例 9. 停止旧数据库,然后使用 neo4j/neo4j-admin:5.25.1-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 工具 验证您的数据是否已恢复。