Neo4j部署&备份
一、部署
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
!https://img-blog.csdnimg.cn/img_convert/697c2bb8ffaa3b6b466d0500a4c00b0f.png
4、下载插件
这一步针对社区版本
apoc 插件下载地址:https://neo4j.com/docs/apoc/current/installation/#docker
选择对应的版本
!https://img-blog.csdnimg.cn/img_convert/0e1357e3be67126f35b7d8d65ec9e1f3.png
我的是 4.4.x 版本的,点击后进入下载页面:
!https://img-blog.csdnimg.cn/img_convert/6d90918230a73cd95189428af926e8ad.png
# 创建插件目录
mkdir -p /home/data/neo4j/data/plugins
将插件下载/上传至该目录下即可
ll /home/data/neo4j/data/plugins
!https://img-blog.csdnimg.cn/img_convert/6a191182023c05fe456966d5fd5b68df.png
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
二、验证
1、连接数据库
注意端口是:27687
!https://img-blog.csdnimg.cn/img_convert/65947f849916b7ad5df5415bf589252f.png
2、进入数据库 Web 页面
!https://img-blog.csdnimg.cn/img_convert/3cfaf88b425e793f67e32ef548fb250b.png
三、备份
3.1 离线备份
1、先 docker stop 原来的容器
docker stop neo4j
2、开始数据冷备
重新启动一个临时容器进行备份
注意:备份文件夹 如/home/data/neo4j/data/db-backup 需要给777权限
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 语句。
!https://img-blog.csdnimg.cn/img_convert/2dec6215c9d86d2a1cafdd7df0a27f9b.png
# 创建存放‘命令执行文件’的目录
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`
备份脚本:
--volume= 映射
7b90874542fa =容器id或用容器名
neo4j-admin dump = 备份命令老版本dump,新版本改为了backup
#!/bin/bash
#data:2024.05.10
#author:yushui
neo4jname="neo4j_4.4.3recover"
docker_path="/usr/bin/docker"
# 备份
$docker_path stop $neo4jname
$docker_path run -i --rm \\
--volume=/data/sioc/neo4j/data:/var/lib/neo4j/data \\
--volume=/data/sioc/neo4j_bak:/backups \\
--volume=/etc/localtime:/etc/localtime \\
7b90874542fa \\
neo4j-admin dump --database=neo4j --to=/backups/$(date +%Y%m%d_%H_%M).dump
$docker_path start $neo4jname
界面修改密码:
ALTER USER neo4j SET PASSWORD '新密码';