基于 Docker 的 Neo4j 部署及数据备份与恢复

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

neo4j_logo-facebook


目录


一、部署

1、pull 镜像

docker pull neo4j:4.4.16-community

2、创建目录

mkdir -p /home/data/neo4j/{data,logs,conf,import,db-backup}

3、运行容器

docker run -itd \
  --name neo4j \
  --restart always \
  -p 27474:7474 \
  -p 27687:7687 \
  -v /home/data/neo4j/data:/data \
  -v /home/data/neo4j/logs:/logs \
  -v /home/data/neo4j/conf:/var/lib/neo4j/conf \
  -v /home/data/neo4j/import:/var/lib/neo4j/import \
  -v /etc/localtime:/etc/localtime \
  -e NEO4J_server_backup_enabled=true \
  -e NEO4J_AUTH=neo4j/zhurs@123 neo4j:4.4.16-community

# 注社区版不支持热备企业版支持热备和冷备。社区版要热备只能进行逻辑备份
# NEO4J_ACCEPT_LICENSE_AGREEMENT: 启用热备

查看启动日志

docker logs -f neo4j

image-20230103175348803

4、下载插件

这一步针对社区版本

apoc 插件下载地址https://neo4j.com/docs/apoc/current/installation/#docker

选择对应的版本

image-20230104144826398

我的是 4.4.x 版本的点击后进入下载页面

image-20230104144938807

# 创建插件目录
mkdir -p /home/data/neo4j/data/plugins

将插件下载/上传至该目录下即可

ll /home/data/neo4j/data/plugins

image-20230104145130008

5、修改配置文件

追加如下内容

vim /home/data/neo4j/conf/neo4j.conf

# 添加相关参数及指定插件目录
dbms.security.procedures.unrestricted=apoc.trigger.,apoc.meta.
dbms.security.procedures.whitelist=apoc.coll.,apoc.load.,apoc.*
dbms.directories.plugins=/data/plugins
server.backup.enabled=true
dbms.directories.logs=/logs

6、添加 apoc 配置文件

与 neo4j.conf 配置文件同级目录

vim /home/data/neo4j/conf/apoc.conf
apoc.export.file.enabled=true
apoc.import.file.enabled=true
apoc.import.file.use_neo4j_config=true

如果你不添加该配置文件那你就在允许容器时指定环境变量即可如下。

docker run -itd \
  --name neo4j \
  --restart always \
  -p 27474:7474 \
  -p 27687:7687 \
  -v /home/data/neo4j/data:/data \
  -v /home/data/neo4j/logs:/logs \
  -v /home/data/neo4j/conf:/var/lib/neo4j/conf \
  -v /home/data/neo4j/import:/var/lib/neo4j/import \
  -v /etc/localtime:/etc/localtime \
  -e apoc.export.file.enabled=true \
  -e apoc.import.file.enabled=true \
  -e apoc.import.file.use_neo4j_config=true \
  -e NEO4J_server_backup_enabled=true \
  -e NEO4J_AUTH=neo4j/zhurs@123 neo4j:4.4.16-community

7、重启容器

docker restart neo4j

二、验证

浏览器访问http://192.168.56.132:27474/

1、连接数据库

注意端口是27687

image-20230103175620564

2、进入数据库 Web 页面

image-20230103175729333

三、备份

3.1 离线备份

1、先 docker stop 原来的容器

docker stop neo4j

2、开始数据冷备

重新启动一个临时容器进行备份

docker run --interactive --tty --rm \
  --volume=/home/data/neo4j/data:/data \
  --volume=/home/data/neo4j/data/db-backup:/backups \
  --volume=/etc/localtime:/etc/localtime \
  neo4j:4.4.16-community \
  neo4j-admin dump --database=neo4j --to=/backups/`date +%Y%m%d_%H:%M`.dump

3、数据恢复

同样是在 Neo4j 停机状态下进行数据恢复

docker run --interactive --tty --rm \
  --volume=/home/data/neo4j/data:/data \
  --volume=/home/data/neo4j/data/db-backup:/backups \
  neo4j:4.4.16-community \
  neo4j-admin load --database=neo4j --from=/backups/xxxx.dump

3.2 在线备份

数据备份与恢复无需停机。

注意这是企业版的 Neo4j社区版本不支持热备。

1、开始数据热备

docker exec --interactive --tty neo4j-new neo4j-admin backup --database=neo4j --to=/backups/`date +%Y%m%d_%H:%M`.back

2、数据恢复

docker exec --interactive --tty neo4j-new neo4j-admin backup --backup-dir=/backups/xxx.back

3.3 社区版备份

1、连接 neo4j 数据库并创建相关测试数据略

2、登录 neo4j 数据库

cypher-shell -d neo4j

# 回车后输入用户名/密码
CALL apoc.export.cypher.all("/data/db-backup/all.cypher", {
    format: "cypher-shell",
    useOptimizations: {type: "UNWIND_BATCH", unwindBatchSize: 20}
});

# 注意这种执行备份语句只能再用户数据库中执行系统数据库system是不能执行的执行报错

3、数据恢复

cat /data/db-backup/all.cypher | cypher-shell -a neo4j://127.0.0.1:6787 -u neo4j -p <yourpasswd> --format verbose

4、配合计划任务

Docker 部署 Neo4j 备份时如何配合 Host 计划任务思路cypher-shell 加 -f 参数指定要执行的文件db-backup.txt该文件中包含要执行的 sql 语句。

image-20230104160806372

# 创建存放‘命令执行文件’的目录
mkdir -p /home/data/neo4j/data/execute

# 添加你自定义的文件该文件中包含要执行的 sql 语句
vim /home/data/neo4j/data/execute/db-backup.txt
CALL apoc.export.cypher.all("/data/db-backup/all.cypher", {
    format: "cypher-shell",
    useOptimizations: {type: "UNWIND_BATCH", unwindBatchSize: 20}
});

指定对应文件执行测试。

cypher-shell -u neo4j -p zhurs@123 -f /data/execute/db-backup.txt

配合 Host 计划任务。

00 07 * * * /usr/bin/docker exec -it neo4j cypher-shell -u neo4j -p zhurs@123 -f /data/execute/db-backup.txt
00 08 * * * /usr/bin/mkdir /home/data/neo4j/data/db-backup/`date +%Y%m%d_%H:%M` && /usr/bin/cp -a /home/data/neo4j/data/db-backup/all.cypher /home/data/neo4j/data/db-backup/`date +%Y%m%d_%H:%M`

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker