备份和恢复 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
镜像备份数据库
要执行备份,集群至少需要一个启用备份的服务器,并且备份侦听地址端口已设置并暴露。端口在 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 企业版许可协议的环境变量。 |
有关 |
最后,您可以使用 Cypher Shell 工具来验证您的数据是否已恢复。