部署
部署主要包括:容量规划、单实例或集群安装及安装后的相关处理。
系统需求
运行一个 Neo4j
数据库实例所需的系统需求清单:
CPU
:通常性能受限于内存容量和磁盘I/O
容量。推荐配置:Intel Core i7, IBM POWER8
- 内存:图越大则所需内存越多。推荐配置:
16~32GB
或更多。 - 磁盘:磁盘性能是最重要的指标。推荐配置:
SSD w/ SATA
。 - 文件系统:由于普通
Linux / UNIX
系统中存在的缓冲区高速缓存或页面高速缓存,大多数磁盘都是经过缓存进行的。因此当系统发生故障时,这种延迟可能会造成文件更新内容的丢失。推荐配置:ext4 / ZFS
。 - 软件:
Neo4j
需要一个Java
虚拟机,因此Neo4j
中都会提前预装JVM
。
文件位置
默认情况下 Neo4j
安装后的重要文件及目录如下:(此处为 Linux / UNIX
发行版本的文件目录)
Configuration
:<neo4j-home>/conf/neo4j.conf
Data
:<neo4j-home>/data
Logs
:<neo4j-home>/logs
Metrics
:<neo4j-home>/metrics
Import
:<neo4j-home>/import
Bin
:<neo4j-home>/bin
Lib
:<neo4j-home>/lib
Plugins
:<neo4j-home>/plugins
Log
文件位置:
neo4j.log
: 标准日志。debug.log
: 调试Neo4j
的日志。http.log
:HTTP API
的请求日志。gc.log
:JVM
提供的垃圾收集日志。query.log
: 记录超过设定查询时间阈值的查询日志(仅限企业版)。security.log
: 数据库安全事件日志(仅限企业版)。service-error.log
: 安装或运行Windows
服务时遇到的错误日志(仅限Windows
)。
可以使用 dbms.directions.*
配置对数据库部分路径进行修改,<neo4j-home>, bin, conf, certificates
的位置可以使用环境变量进行配置。
Neo4j
数据库运行的用户必须对相应的文件夹和文件具有以下权限:
- 只读权限:
conf, import, bin, lib, plugins
。 - 读写权限:
data, logs, metrcis
。 - 执行权限:
bin
目录中的所有文件。
端口
Neo4j
使用到的主要端口:
- 6362: 备份端口。默认情况下禁用备份功能。
- 7474:
HTTP
服务端口。建议生产环境下不打开此端口,因为未加密。 - 7473: 由
REST API
使用。 - 7687: 由
Cypher-Shell
和Neo4j
浏览器使用。 - 5000, 6000, 7000: 因果集群端口。列出的端口是配置文件中的默认端口,端口在实际使用中可能不同,须做相应的修改。
- 5001, 6001: 高性能集群端口。列出的端口是配置文件中的默认端口,端口在实际使用中可能不同,须做相应的修改。
- 2003:
Graphite
监控端口。Neo4j
数据库与Graphite
服务器通信的端口。 - 3637:
JMX
监控端口。不推荐采用这种检查数据库的方式,默认情况下不启用。 - 1337:
Neo4j-shell
工具使用的端口,现已被弃用。
初始密码
使用 neo4j-admin
的 set-inital-password
命令设定当前用户的 neo4j
数据库密码,此操作必须在首次启动数据库之前执行。
语法为:neo4j-admin set-inital-password <password>
。
如果未使用此方法显式设置密码,Neo4j
数据库将其设置为默认密码 neo4j
,该密码可在首次登录时依据提示来更改此默认密码。
数据收集器
Neo4j
使用数据收集器(UDC
)收集使用数据的信息,并提供给官方的 UDC
服务器(网址为: udc.neo4j.com
),该数据收集器可以禁用,并且不收集任何机密信息。Neo4j
数据库默认开启 UDC
程序,并伴随数据库启动而自动运行,UDC
将在数据库正常运行的 10 分钟后才发送第一个 ping
命令,这样做有两个考虑:首先不希望启动 UDC
而使数据库变慢,其次希望将自动 ping
测试保持最少。
配置 Neo4j
连接器
应用程序与 Neo4j
数据库之间通信需要有相应的机制作为保障,从而 Neo4j
连接器应用而生,支持 Bolt
二进制协议或者 HTTP/HTTPS
方式,极大的方便了应用程序的开发。
默认情况下可配置三种不同的 Neo4j
连接器:Bolt
连接器、HTTP
连接器和 HTTPS
连接器。
每种 Neo4j
连接器均有三个参数:
enabled
: 启用或禁用连接器。listen_address
: 设定指定Neo4j
如何监听传入链接,它由两部分组成:网络IP
地址和端口号,并以格式 “网络IP
地址:
端口号” 表示。advertised_address
: 设定指定客户端使用该连接器的地址。dbms.connectors.default_listen_address
: 所有连接器的listen_address
的默认网络接口地址。dbms.connectors.default_advertised_address
: 所有连接器的advertised_address
的默认网络接口地址。
证书
默认情况下,Neo4j
数据库在与官方驱动配套程序使用时,将采用 TLS
协议加密苏哦有客户服务器通信,包括 Bolt
和 HTTP
协议,这能确保应用程序与数据库之间的安全可靠通信。
如果需要使用自己的 SSL
证书,则需要这两个文件分别命名为 neo4j.key
和 neo4j.cert
。其中密钥文件 neo4j.key
是不加密的,需要正确设置该文件的权限,以便只有 Neo4j
用户能够读取它。先将此文件放入指定的目录中,默认在 <neo4j-home>/certificates
目录下,也可通过在 neo4j.conf
中设置 dbms.connectories.certificates
来指定证书文件的存放路径,默认为 certificates
(相对路径)。
监控
Neo4j
数据库提供了一个简单直观的 Web
监控界面,通过浏览器方式访问 Neo4j
数据库。主要包含:磁盘利用情况、缓存活跃情况和集群情况。
集群情况中包含了众多的界面参数:
Store Sizes
: 存储容量。ID Allocation
:ID
分配。Page Cache
: 页面缓存。Transactions
: 事务。
指标
指标的功能仅企业版支持。Neo4j
可以配置为以下两种不同的方式来呈现指标:
- 将指标导出为
CSV
文件。 - 向
Graphite
或基于Graphite
协议的任何监控工具发送指标。
启用指标记录
1
2
3
4
5metrics.neo4j.enabled=true
metrics.neo4j.tx.enabled=true
metrics.neo4j.pagecache.enabled=true
metrics.neo4j.counts.enabled=true
metrics.neo4j.network.enabled=trueGraphite
将以下设置添加到neo4j.conf
配置文件中,以开启与Graphite
的集成,从而启动Neo4j
连接到Graphite
来监控Neo4j
的各项指标。1
2
3
4metrics.graphite.enabled=true
metrics.graphite.server=localhost:2003
metrics.graphite.interval=3m
metrics.prefix=Neo4j_1CSV
文件
将以下设置添加到neo4j.conf
配置文件中,以便将各项指标导出到本地CSV
文件中。1
2
3
4metrics.csv.enabled=true
# default is a metrics directory under neo4j-home
# metrics.csv.path='/local/fiel/system/path'
metrics.csv.interval=3m可用通用指标
建议查书或者官方网站。
日志
Neo4j
日志分为安全日志和查询日志两种,用于记录数据库的查询和发生的安全事件。
查询日志
dbms.logs.query.enabled=fasle
: 是否记录数据库所执行的查询。dbms.logs.query.paramter_logging_enabled=true
: 是否设定查询耗时超过配置阈值。dbms.logs.query.threshold=0
: 用于设定记录查询的阈值,即如果查询执行所花费的时间大于此阈值,则记录此查询(前提是启用查询日志记录)。query.log
: 设置查询日志的文件名,存储在Logs
目录中,当然也可以在neo4j.conf
配置文件中配置查询日志的轮换。dbms.logs.query.ratation.keep_number=7
: 设置保存历是查询日志文件的数量。dbms.logs.query.ratation.size=20MB
: 查询日志自动轮换的文件大小。
安全事件日志
Neo4j
数据库安全事件日志功能用于记录所有的安全事件,对于本机用户管理,将记录以下操作:
- 登陆尝试,每个默认值都记录成功和不成功的登录。
- 更改用户的密码、管理员和用户。
- 创建和删除用户,包括失败的尝试。
- 创建和删除自定义角色,包括失败的尝试。
- 为用户分配和删除角色,包括失败的尝试。
- 暂停和激活用户。
- 非管理员用户尝试列出用户和角色的失败尝试。
如果使用 LDAP
作为身份验证方法,还会记录一些 LDAP
配置错误的情况,以及 LDAP
服务器通信事件和故障。
安全事件日志文件名为 security.log
,存放在 Logs
目录中,可以在 neo4j.conf
配置文件中配置安全事件日志的轮换。
dbms.logs.security.rotation.size=20MB
: 安全事件日志自动轮换的文件大小。dbms.logs.security.rotation.delay=300s
: 设置在最后一次日志轮换发生后,日志可能再次轮换之前的最小时间间隔。dbms.logs.security.rotation.keep_number=7
: 设置保存安全事件日志的文件数量。
查询管理
Neo4j
提供了相应的手段可从安全性或性能角度对查询语句进行检查。查询日志可用于数据库的连续监控和故障排除,事务超时功能可以为查询设定最大的运行时间,查询管理则可查看数据库中运行的查询,必要时可以终止某个查询。
事务超时
执行保护功能可以终止某执行时间超过配置超时时间的事务。dbms.transaction.timeout=10s
表示设定事务超时时间为 10s
,而当设定值为 0s
时,则为禁用执行保护。
此功能对使用自定义超时(通过 Java API
)指定的事务不产生影响。
查询管理
此功能仅在企业版中支持。
列出所有的查询
管理员可以查询到当前运行中的所有查询,而当前用户仅可以查看到自己当前运行的所有查询。
语法为:CALL dbms.listQueries();
终止多个查询
管理员可以终止给定查询ID
列表的事务,而当前用户仅可以终止自己创建的事务。
语法为:CALL dbms.killQueries(ids);
,其中ids
为List<String>
类型,是需要终止的事务ID
的列表。终止一个查询
管理员可以终止给定查询ID
列表的任意一个事务,而当前用户仅可以终止自己创建的一个事务。
语法为:CALL dbms,killQuery(id);
,类型为String
类型,是需要终止的事务ID
。
因果集群监控
查询因果集群核心服务器
可以在因果集群的每个实例上调用过程dbms.cluster.role()
以返回该实例的角色。
语法为:CALL dbms.cluster.role()
,返回值为LEADER, FOLLOWER, READ_REPLICA
三个中的一个,类型为String
类型。获取因果集群的整体概况
函数dbms.cluster.overview()
返回集群中所有实例的详细信息,以便获取集群的拓扑概述。
语法为:CALL dbms.cluster.overview()
。获取路由推荐
应用程序需要知道哪个实例可以提供所需的服务。
语法为:CALL dbms.cluster.routing.getServers()
,该过程返回特定服务与提供此服务的实例的地址之间的映射,还返回生存时间(TTL
)信息。
安全管理
对于 Neo4j
数据库而言,首要的就是数据安全,可通过遵循有关服务器和网络安全性的行业做法确保物理数据安全,再通过适当的身份验证和授权规则来确保 Neo4j
的信息安全。
社区版用户管理
Neo4j
社区版在安全管理方面相比企业版而言,功能较弱,仅提供用户和密码管理,没有涉及角色、权限控制等企业必需的安全管理功能。本地用户和角色管理通过使用内置的 Cypher
过程进行管理。
dbms.security.listUsers
当前用户查看系统中所有用户的详细信息。
语法为:CALL dbms.security.listUsers();
,返回值为:username
和flags
。dbms.security.changePassword
当前用户更改自己的密码。
语法为:CALL dbms.security.changePassword(password);
,其中参数为当前用户的新密码。dbms.security.showCurrentUser
显示当前用户详情,并显示是否需要更改密码。
语法为:CALL dbms.security.showCurrentUser();
,返回值为username
和falgs
。dbms.security.createUser
将用户添加到Neo4j
社区版系统。
语法为:CALL dbms.scurity.createUser(usernaem, password, requirePasswordChange);
,其中username
和password
为新添加用户的用户名和密码,requirePasswordChange
表示是否需要修改密码。dbms.security.deleteUser
从系统中永久删除用户。
语法为:CALL dbms,security.deleteUser();
,其中username
为待删除的用户名。
LDAP
集成
LDAP
协议以 X.500
标准为基础,但与 X.500
相比 LDAP
更简单,它可根据需要定制,并支持 TCP/IP
协议,因此使用非常广泛。Neo4j
本身支持 LDAP
协议,包括:Active Directory
、OpenLDAP
或者其他的 LDAP
兼容的身份验证服务。所有设置都需要在服务器启动时在默认配置文件 neo4j.conf
中进行设定。
配置
Neo4j
使用LDAP
作为身份验证和授权提供方。1
2dbms.security.auth_enabled=true
dbms.security.auth_provider=ldap配置活动目录。
1
2
3
4
5
6
7
8
9
10
11dbms.security.ldap.host=ldap://myactivedirectiory.example.com
dbms.security.ldap.authentication.user_dn_template=cn=[0],cn=Users,dc=example,dc=com
dbms.security.ldap.authentication.user_search_base=cn=Users,dc=example,dc=com
dbms.security.ldap.authentication.user_search_filter=cn=(&(objextClass=*)(cn={0}))
dbms.security.ldap.authentication.group_membership_attributes=memberOf
dbms.security.ldap.authentication.group_to_role_mapping=\
"cn=Neo4j Read Only,cn=Users,dc=neo4j,dc=com" = reader ;\
"cn=Neo4j Read-Write,cn=Users,dc=neo4j,dc=com" = publisher ;\
"cn=Neo4j Schema Manager,ch=Users,dc=neo4j,dc=com" = architect ;\
"cn=Neo4j Administrator,cn=Users,dc=neo4j,dc=com" = admin ;\
"cn=Neo4j Procedures,cn=Users,dc=neo4j,dc=com" = allowed_role ;\
ldapsearch
工具
可以使用 LDAP
命令行工具 ldapsearch
来验证配置是否正确、LDAP
服务器是否正在响应,可以通过发送包含 LDAP
配置设置值的搜索命令来执行此项操作。
参数
dbms.security.ldap.authorization.use_system_account=true
的验证为:1
2# ldapsearch -v -H ldap://<dbms.security.ldap.host> -x -D <dbms.security.ldap.authentication.system_username> -w <dbms.security.ldap.authentication.system_password> -b <dbms.security.ldap.authentication.user_search_base> "<dbms.security.ldap.authentication.user_search_filter>" <dbms.security.ldap.authentication.group_membership_attributes>
# ldapsearch -v -H ldap://myactivedirectiory.example.com:389 -x -D cn=search-account,cn=Users,dc=example,dc=com -w secret -b cn=Users,dc=example,dc=com "cn=(&(objextClass=*)(cn=john))" memberOf参数
dbms.security.ldap.authorization.use_system_account=false
的验证为:1
2# ldapsearch -v -H ldap://<dbms.security.ldap.host> -x -D <dbms.security.ldap.authentication.user_dn_template : replace {0}> -W -b <dbms.security.ldap.authentication.user_search_base> "<dbms.security.ldap.authentication.user_search_filter : replace {0}>" <dbms.security.ldap.authentication.group_membership_attributes>
# ldapsearch -v -H ldap://myactivedirectiory.example.com:389 -x -D cn=search-account,cn=Users,dc=example,dc=com -W -b cn=Users,dc=example,dc=com "cn=(&(objextClass=*)(cn=john))" memberOf
认证缓存
认证缓存(Auth Cache
)是 Neo4j
通过 LDAP
服务器缓存认证结果以提升性能的机制,它采用 dbms.security.ldap.autnentication.cache_enabled
和 dbms.security.auth_cache_ttl
参数进行配置。
1 | dbms.security.ldap.authentication.cache_enabled=true |
管理员可以手动清除身份验证缓存,以强制重新查询来自联合身份验证提供的系统身份验证和授权信息,可以在 Neo4j
浏览器或 Neo4j Cypher Shell
中执行语句:CALL dbms.security.clearAuthCache();
即可。
可以采用 StartTLD
来配置对活动目录的加密。
1 | dbms.security.ldap.use_startls=true |
在实际生产环境中,建议使用由证书颁发机构颁发的 SSL
证书来确保对 LDAP
服务器的安全访问。可以在 neo4j.conf
中使用参数 dbms.jvm.addtional
来指定证书的详细信息,以告知 Neo4j
本地证书的位置。
1 | dbms.jvm.addtional=-Djavax.net.ssl.keyStore=MyCert.key |
子图访问控制
通过使用用户定义的过程和自定义角色,管理员可以将用户的访问和动作限制到图中的指定部分,即:可以在子图的级别配置访问控制。
自定义角色是由 Neo4j
数据库管理员创建和删除,仅用于控制执行某些自定义开发的过程,与数据库自带的角色相比,自定义角色的权限需要在 neo4j.conf
中显式准许。
管理自定义角色
本机用户场景
创建自定义角色,然后将此角色分配给相关用户。1
2
3# 创建 accounting 角色并将其分配给预先存在的 billsmith 用户
CALL dbms.security.createRole('accounting')
CALL dbms.security.addRoleToUser('accounting', 'billsmith')联合用户场景(
LDAP
)
在LDAP
方案中,LDAP
用户组必须映射到Neo4j
中的自定义角色。1
2# 将组号 101 的 LDAP 组映射到自定义 accounting 角色
dbms.security.realms.ldap.authorization.group_to_role_mapping=101=accounting
配置过程的权限
需要自行创建读或写数据的过程(Procedure
),自然内置或第三方库自带的过程除外,此过程与普通 Cypher
语句执行的安全规则相同。
可以使用配置选项 dbms.security.procedures.default_allowed
和 dbms.security.procedures.roles
来准许特定角色执行相应的访问过程。
1 | # 具有 Convert 角色的用户都可执行 apoc.convert 命名空间中的所有过程 |
安全清单
安全清单为 Neo4j
数据库安全性建议的总结。
- 在安全网络及安全服务器上部署
Neo4j
,使用子网和防火墙,只打开必要的端口。 - 保护静态数据,使用卷加密,管理对数据库转换和备份的访问。
- 保护传输中的数据,对远程访问
Neo4j
数据库,只打开加密的Bolt
或HTTPS
访问链接,使用受信任证书颁发机构颁发的SSL
证书。 - 验证部署的任何自定义代码(过程和非托管扩展)。
- 确保
Neo4j
文件正确的文件权限。 - 如果启用了
LOAD CSV
函数操作,确保未授权用户不可导入数据。 - 检查
neo4j.conf
文件,了解已弃用函数和远程JMX
相关的端口。 - 使用
Neo4j
最新的补丁版本。
运维与优化
本节介绍影响操作性能的因素,以及如何调整 Neo4j
以获得最佳吞吐量。
内存调优
Neo4j
在启动时将自动配置内存相关参数的默认值,并默认可使用机器上的所有内存。
有三种类型的内存需要考虑:
- 操作系统内存。
- 页面缓存。
- 堆空间。
需要注意的是,操作系统内存不能显式配置,而实指定页面缓存和堆空间之后所剩余的内存。
操作系统内存大小
必须为服务器上与Neo4j
数据库不相关的其他程序预留一些内存。1 GB
内存是Neo4j
服务器的最低配置。基本的计算方法如下:系统内存 = 1GB + (graph.db / index) + (graph.db / schema)
。页面缓存大小
页面缓存用于缓存存储在磁盘上的Neo4j
数据,确保将来自磁盘的所有或至少大部分图数据缓存到内存中。
可通过简单的方法确定页面缓存的大小:汇总含<neo4j-home>/data/database/graph.db/*store.db*
的所有文件大小,再增加20%
的预留。
指定页面缓存的参数是dbms.memory.pagecache.size
该参数设定允许Neo4j
使用多少内存用于高速缓存。如果在启动时没有明确指定,Neo4j
将给予默认配置:(机器可用内存 - JVM 最大堆分配) * 50%
。堆大小
可用堆大小是影响Neo4j
性能的一个重要因素。大多数Neo4j
应用,堆大小设置为8~16GB
之间即可稳定运行。在文件<neo4j-home>/conf/neo4j-wrapper.conf
中设置dbms.memory.heap.initial_size
和dbms.memory.heap_max_size
参数即可,以兆字节为单位。(建议将这两个参数设置为相同的值,以避免不必要的垃圾收集)调整垃圾收集器
建议使用并发垃圾收集器。因此内存调优可按照如下步骤进行:
- 计划操作系统内存大小。
- 计划页面缓存大小调整。
- 计划堆空间大小。
- 做合理的检查,实际操作系统内存分配 = 可用内存 - (页面缓存 + 堆空间大小)。
当集群运行一段时间后,又如何计算堆大小和页面缓存大小呢?
1 | ./neo4j-admin memrec --memory=8g |
其中 --memory
参数指定的是当前机器的可用内存。执行上述命令 Neo4j
工具就可以根据当前的索引、数据等信息计算出最佳堆大小和页面缓存大小。
压缩存储
在很多情况下,Neo4j
可以压缩和内联存储属性值,其目的在于节省磁盘空间和提高 I/O
操作性能。
短数组的压缩存储采用位剃削算法,以减少存储数组中成员的位数。步骤如下:
- 对于数组的每个成员,确定最左边设置位的位置。
- 确定数组中所有成员中最大的位置。
- 他将所有成员减少到该位数。
- 存储这些值,前缀为一个小标题。
当在数组中包括单个负值时,将使用原始字节大小来存储。
Linux
文件系统调优
Neo4j
数据库在查询数据时通常会产生许多少量、随机的读操作,而在提交更改时经常会产生少量的顺序写操作。
因此修改 Linux
使用的完全公平排队(Completely Fair Queuing, CFQ
)算法来调度 IO
请求,将其修改为期限调度器(Deadline Scheduler
)更适合数据库的特定 IO
工作负载情形。
1 | $echo 'deadline' > /sys/block/sda/queue/scheduler |
磁盘、内存及相关提示
与其他的持久化方案一致,性能取决于使用的持久化介质,这就意味着更好的磁盘等于更好的性能。
存储文件保存在低寻道时间的磁盘上将大大提高读取操作的性能。同时为了减少磁盘访问可以加大内存容量。
同时也可以使用 dstat
或 vmstat
等工具来收集应用程序的运行信息。
备份与恢复
此功能仅适用于企业版。
将 Neo4j
数据库备份到远程或离线存储是一项基本操作,Neo4j
支持全量备份和增量备份,对于三种配置方式(单实例、高可用集群和因果集群)的 Neo4j
数据库,其备份过程是相同的。备份使用 neo4j-bakcup
工具在网络上运行,即可从 Neo4j
服务器备份到本地副本。
必须配置两个参数才能执行备份:
dbms.backup.enabled=true
,启用备份,这是默认值。dbms.backup.address=<IP>:6362
,配置备份服务监听的接口和端口。
这里备份的数据与生产系统没有任何的依赖关系,需要分开存储,如果可以需要遵循321原则。
执行备份
备份命令 neo4j-admin
工具位于 bin
目录下,使用 backup
参数运行它,以便对正在运行的数据库执行联机备份。
语法为:neo4j-admin backup --backup-dir=<backup-path> --name=<graph.db-backup> [--from=<address>] [--fallback-to-full[=<true|fasle>]] [--check-consistency[=<true|false>]] [--cc-report-dir=<directory>] [--additional-config=<config-file-path>] [--timeout=<timeout>]
。
1 | neo4j-admin backup --from=192.168.1.34 --backup-dir=/mnt/backup/neo4j-backup --name=graph.db-backup |
增量备份需指定现有备份目录并且有上次被封以来的事务日志。备份工具将上次备份之后的任何操作进行备份,其结果将是与当前服务器状态一致的更新备份。
另外增量备份可能会失败,主要原因在于事务日志被删除且 --fallback-to-full
参数被设置为 false
,建议将参数设置为 true
,避免在增量备份时失败可以转换为全量备份。同时事务日志的自动轮询时间也是很重要的,配置 dbms.tx_log.rotation.retention_policy
以便事务日志保存在增量备份之间。
1 | neo4j-admin backup --from=192.168.1.34 --backup-dir=/mnt/backup/neo4j-backup --name=graph.db-backup --fallback-to-full=true --check-consistency=true |
备份因果集群时,核心服务器和只读副本都支持备份协议,都可用于集群备份,但是在生产中更倾向于使用只读副本作为备份,因为只读副本的数量在因果集群部署中远远多于核心服务器。
恢复备份
Neo4j
备份是全功能的数据库备份。恢复备份,必须关闭数据库,使用 neo4j-admin
工具的 restore
参数恢复备份。
语法为:neo4j-admin restore --from=<backup-path> --database=graph.db --force
1 | neo4j-admin restore --from=/mnt/backup/neo4j-backup --database=graph.db --force |
从高可用集群环境中的备份进行恢复,请按照以下步骤进行:
- 关闭集群中的所有数据库实例。
- 恢复每个实例上的备份。
- 启动数据库实例。
恢复 Neo4j
因果集群的步骤与创建因果集群的步骤类似,即首先创建一个新的因果集群,但是不要启动组成集群的实例,而首先进行数据库的恢复。
相关工具
Cypher Shell
Cypher Shell
是 Neo4j
数据库的一个命令行工具,可以用于数据库连接、调用 Cypher
语句进行数据查询或定义相关模式和执行管理任务。Cypher Shell
采用显式事务方式,允许将多个操作分组一并执行或回滚,通信方式采用加密的二进制 Bolt
协议。
语法为:cypher-shell [-h] [-a ADDRESS] [-u USEWRNAME] [-p PASSWORD] [--encryption {true, fasle}] [--format {verbose, plain}] [--debug] [--fail-fast | --fail-at-end] [cypher]
。
1 | $cypher-shell -u johnode -p secret |
转储和加载
Neo4j
数据转储和加载需要用到 neo4j-admin
命令,该命令可将数据库从一个环境移动到另一个环境,也可用于数据库的脱机备份。
命令格式为:neo4j-admin dump --database=<datttabase> --to=<destination-path>
和 neo4j-admin load --from=<archive-path> --database=<database> [--force]
1 | neo4j-admin dump --database=graph.db --to=/backups/graph.db/2022-02-27.dump |
对于 Neo4j
在版本上的变更导致数据库目录结构的变更,建议 neo4j-admin dump
和 neo4j-admin load
这种更安全的全库导出、导入方式。
一致性检查
一致性检查可以使用 neo4j-admin
工具的 check-consistency
参数来检查数据库的一致性。
该 neo4j-admin
工具位于 bin
目录中,语法调用为:neo4j-admin check-conversistency --database=<database> [--report-dir=<directory>] [--additional-config=<file>] [--verbose]
。
1 | neo4j-admin check-conversistency --database=graph.db |
如果一致性检查工具未发现错误,则程序自动运行结束并不生成相应的报告;但如果发生错误,程序将会退出,退出代码为 1
,并将错误信息写入到 inconsistencies-YYYY-MM-DD.HH24.MI.SS.report
的报告文件中,此文件位置在当前目录下或者由参数 report-dir
指定。
一致性检查工具可以调用由参数 --additional-config
指定的配置文件中的其他配置选项,配置文件的格式与 neo4j.conf
格式相同。
1 | # conversistency-check.properties |
一致性检查工具不能与当前正在使用的数据库一起使用,如果与正在运行的数据库一起使用,这自动停止并输出错误信息。
引用
个人备注
此博客内容均为作者学习所做笔记,侵删!
若转作其他用途,请注明来源!