backup

语法

backup(backupDir, dbPath|sqlObj, [force=false], [parallel=false], [snapshot=true], [tableName], [partition])

参数

backupDir 字符串,表示存放备份数据的目录。

New in version 2.00.8: 参数 dbPath

dbPath 字符串,表示数据库路径。若指定该参数,以分区为单位拷贝文件进行备份。

sqlObj SQL 元代码,表示备份的数据。若指定该参数,则仅对 SQL 语句过滤出的数据进行备份。

force 布尔值,表示是否进行全量备份。进行非首次备份时,若 force = true,系统将待备份数据全部进行备份;否则仅备份有修改或新增的分区数据。

parallel 布尔值,表示是否对一个数据表下不同分区进行并行备份。默认值为 false。

New in version 2.00.8: 参数 snapshot, tableName, partition

以下参数仅在指定 dbPath 时有效:

snapshot 布尔值,仅在参数 partition 为空时有效。表示进行非首次备份时,源数据库中若存在被删除的表/分区,是否同步将备份中对应的表/分区删除。 若设置为 true,则备份文件中存在已经被删除的分区或表,会同步进行删除;否则不会删除。

tableName 字符串标量或向量,表示表名。若不指定,表示数据库下的所有表。

partition 表示分区,若不指定,则表示所有分区。有两种指定模式:

  • 指定路径:以 “/” 开头的字符串标量或向量,表示数据库目录下单个或多个分区的路径。请注意对组合分区,路径必须包括所有层次分区。

  • 指定条件:以分区列的一个或多个值作为过滤条件。对于组合分区,partition 是一个元组,每个元素代表一层分区的过滤条件,如果某层分区不需要过滤,那么相应的过滤条件需置为空。需要注意的是,对于范围分区,需要指定为分区内的一个值。

假如一个组合分区数据库 “dfs://compoDB”,一级分区采用值分区:2017.08.07;二级分区采用哈希分区:Key0 和 Key1。分区数据的路径分别为:<HomeDir>/storage/CHUNKS/compoDB/20170807/Key0 和 <HomeDir>/storage/CHUNKS/compoDB/20170807/Key1。

若要备份单个分区 20170807/Key0,指定路径时需要设置 partition = “/20170807/Key0”;指定条件时需要设置 partition = [2017.08.07, 0]。

若要备份两个分区 20170807/Key0 和 20170807/Key1,则 partition 指定为 [“/20170807/Key0”, “/20170807/Key1”];指定条件时需要设置 partition = [2017.08.07,[0,1]]。

详情

以分区为单位,备份分布式表的数据。返回一个整数,表示备份成功的分区数量。该函数必须要用户登录后才能执行。

注意事项

  • database 创建数据库时,指定 chunkGranularity = ‘DATABASE’,则只能通过 SQL 语句备份数据。

  • backupDir 目录已存在备份文件,则再次向该目录备份数据时,需保证备份方式(dbPath 或 sqlObj)一致,否则将备份失败。

补充说明

备份时指定 dbPathsqlObj 的功能列表:

功能

dbPath

sqlObj

一键备份整库

支持

不支持

数据一致性

保证数据一致性

不完全保证

增量备份

支持同步已修改、新增及删除的分区数据

只支持同步已修改或新增的分区数据,不支持同步已删除的分区数据

断点续传

支持

不支持

灵活语法

不支持

SQL 语句,具有灵活语法,支持备份整张表或仅备份满足查询条件的数据

性能

拷贝文件方式,内存消耗小,速度快

序列化方式,内存消耗大,速度慢

例子

创建一个组合分区的数据库dfs://compoDB。

$ n=1000000
$ ID=rand(100, n)
$ dates=2017.08.07..2017.08.11
$ date=rand(dates, n)
$ x=rand(10.0, n)
$ t=table(ID, date, x)

$ dbDate = database(, VALUE, 2017.08.07..2017.08.11)
$ dbID=database(, RANGE, 0 50 100);
$ db = database("dfs://compoDB", COMPO, [dbDate, dbID])
$ pt = db.createPartitionedTable(t, `pt, `date`ID)
$ pt.append!(t)

例1. 备份表pt的所有数据。

$ backup("/home/DolphinDB/backup",<select * from loadTable("dfs://compoDB","pt")>,true);
10

例2. 备份表pt中日期超过2017.08.10的数据。

$ backup("/home/DolphinDB/backup",<select * from loadTable("dfs://compoDB","pt") where date>2017.08.10>,true);
2

例3. 备份数据库中表数据。

(1). 备份指定表或所有表

//dfs://compoDB数据库下创建第2张表
$ pt1 = db.createPartitionedTable(t, `pt1, `date`ID)
$ pt1.append!(t)

//同时备份数据库中的两张表
$ backup(backupDir="/home/DolphinDB/backup",dbPath="dfs://compoDB",force=true);
20

(2). partition 指定分区范围

//备份数据库中表 pt 的指定的5个分区
$ partitions=["/20170807/0_50","/20170808/0_50","/20170809/0_50","/20170810/0_50","/20170811/0_50"]
$ backup(backupDir="/home/DolphinDB/backup",dbPath="dfs://compoDB",force=true,tableName=`pt,partition=partitions);
5

(3). partition 指定过滤条件。请注意,对于范围分区,指定分区范围内的一个值,表示整个分区。

//备份数据库中表 pt 的一级分区 20170807 内的 50_100 的分区
$ partitions=[2017.08.07,50]
$ backup(backupDir="/home/DolphinDB/backup",dbPath="dfs://compoDB",force=true,tableName=`pt,partition=partitions);
1
//备份数据库中表 pt 的所有一级分区内的 0_50 的分区
$ partitions=[,[0]]
$ backup(backupDir="/home/DolphinDB/backup",dbPath="dfs://compoDB",force=true,tableName=`pt,partition=partitions);
5

例4. 通过下例说明 snapshot 参数的作用

//删除表pt中分区"/20170811/0_50"
$ db.dropPartition("/20170811/0_50",`pt)
//再次备份,指定snapshot=false
$ backup(backupDir="/home/DolphinDB/backup1",dbPath="dfs://compoDB",force=true,snapshot=false,tableName=`pt);
9
//从备份中恢复的分区仍包含 /20170811/0_50 这个分区,说明备份文件中并没有删除/20170811/0_50 这个分区
$ restore(backupDir="/home/DolphinDB/backup1",dbPath="dfs://compoDB",tableName=`pt,partition="%",force=true)
["dfs://compoDB/20170807/0_50/9m9","dfs://compoDB/20170807/50_100/9m9","dfs://compoDB/20170808/0_50/9m9","dfs://compoDB/20170808/50_100/9m9","dfs://compoDB/20170809/0_50/9m9","dfs://compoDB/20170809/50_100/9m9","dfs://compoDB/20170810/0_50/9m9","dfs://compoDB/20170810/50_100/9m9","dfs://compoDB/20170811/0_50/9m9","dfs://compoDB/20170811/50_100/9m9"]

//再次删除表pt中分区"/20170811/0_50"
$ db.dropPartition("/20170811/0_50",`pt)

//再次备份,指定snapshot=true
$ backup(backupDir="/home/DolphinDB/backup",dbPath="dfs://compoDB",force=true,snapshot=true,tableName=`pt);
9
//从备份中恢复的分区不包含 /20170811/0_50 这个分区,说明备份文件中删除了/20170811/0_50 这个分区
$ restore(backupDir="/home/DolphinDB/backup",dbPath="dfs://compoDB",tableName=`pt,partition="%",force=true)
["dfs://compoDB/20170807/0_50/9m9","dfs://compoDB/20170807/50_100/9m9","dfs://compoDB/20170808/0_50/9m9","dfs://compoDB/20170808/50_100/9m9","dfs://compoDB/20170809/0_50/9m9","dfs://compoDB/20170809/50_100/9m9","dfs://compoDB/20170810/0_50/9m9","dfs://compoDB/20170810/50_100/9m9","dfs://compoDB/20170811/50_100/9m9"]

相关函数:backupDB, backupTable, restore, migrate