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