第 23 章 备份

优质
小牛编辑
134浏览
2023-12-01

注意

备份服务只在Neo4j企业版中可以使用。

备份是通过网络将一个运行的图数据库备份到本地的操作。有两种类型的备份:完整备份和增量备份。

一个 完整备份在不进行任何锁定的情况下拷贝数据库文件,而不会影响到目标数据库的任何操作。这当然也意味着,事务将继续而且存储内容也会被改变。基于这个原因,当备份操作开始后,那些正在运行的事务是值得关注的。当备份操作完成后,所有在备份开始那一刻以后的事务都会在备份文件上面重新执行一遍。这确保了备份数据的数据一致性以及数据存储的快照是最新的。

相比之下,一个 增量备份不会拷贝存储文件 — 而是拷贝在完整备份或者增量备份之后发送的事务的日志,然后在已经存在的备份上面执行一次。这使得增量备份比完整备份更有效率,但它要求在进行增量备份之前必须有一个已经存在的 完整备份

不管采用什么模式,一个备份一旦被创建,结果文件都表示一个持久化的数据库快照,都可以用来启动一个Neo4j数据库实例。

备份的数据库可以通过一个URI地址来指定:

<running mode>://<host>[:port]{,<host>[:port]*}

运行模式必须定义并且只能是 single或者 ha。 <host>[:port] 部分指定了一个运行数据库的主机,如果端口不是默认的,请使用 port指定。额外的 host:port参数是用来传递更多的协调器实例的。

重要

只有配置了参数 online_backup_enabled=true的数据库才可以进行备份。这将使备份服务在默认端口(6362)可以使用。为了能在自定义端口进行备份操作,你可以使用参数 online_backup_port=9999进行配置。

23.1. 嵌入数据库和独立数据库服务器

为了执行一次从一个运行的嵌入数据库或者远程服务器的备份,如下:

1

2

3

4

5

6

7

8

# 执行一次完整备份

./neo4j-backup-full -from single://192.168.1.34 -to /mnt/backup/neo4j-backup

# 执行一次增量备份

./neo4j-backup-incremental -from single://192.168.1.34 -to /mnt/backup/neo4j-backup

# 当服务注册在一个自定义端口时执行一次增量备份

./neo4j-backup-incremental -from single://192.168.1.34:9999 -to /mnt/backup/neo4j-backup

23.2. 在Java中进行在线备份

为了能编程从JVM进行完整或者增量备份你的数据,你需要进行类似如下编码:

1

2

3

OnlineBackup backup = OnlineBackup.from( "localhost");

backup.full( backupPath );

backup.incremental( backupPath );

获取更新信息,请参考: the Javadocs for OnlineBackup

23.3. 高可用性模式

要在一个HA模式的集群上面进行备份,你需要制定一个或者多个管理这个集群的协调器。

注意

如果你为你的HA集群指定了一个集群名称,那么你在备份的时候你需要指定这个名称。 以致于备份系统知道哪些集群需要备份。 增加一个配置参数: -cluster my_custom_cluster_name

1

2

3

4

5

6

7

8

# 执行一次从HA集群的完整备份,指定两个可能的协调器

./neo4j-backup-full -from ha://192.168.1.15:2181,192.168.1.16:2181 -to /mnt/backup/neo4j-backup

# 执行一次从HA集群的增量备份,只指定一个协调器

./neo4j-backup-incremental -from ha://192.168.1.15:2181 -to /mnt/backup/neo4j-backup

# 用一个指定的名称在HA集群上执行一次增量备份(通过Neo4j配置的 'ha.cluster_name' 指定)

./neo4j-backup-incremental -from ha://192.168.1.15:2181 -to /mnt/backup/neo4j-backup-cluster my-cluster

23.4. 恢复你的数据

Neo4j备份的内容是完整功能的数据库。为了使用备份数据源,你需要做的仅仅是用备份的目录取代你正在使用的数据库目录即可。