数据备份与恢复

数据备份

DolphinDB以分区为单位进行数据备份,每个分区备份为一个数据文件。在DolphinDB中,我们使用 backup 函数对全部或部分分区进行备份。

数据备份需要指定存放二进制文件的路径、数据(用SQL语句表示)。备份后,系统会在backupDir/dbName/tbName目录下生成元数据文件meta.bin和数据文件<chunkID>.bin。

下面的例子备份了 dfs://compoDB/pt 数据表的所有数据。

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

数据恢复

DolphinDB具有两种数据恢复的方法:

两者的区别是migrate函数可以批量恢复多个表的全部数据,而restore函数每次只能恢复一个表中部分或全部分区的数据。

注意:目前只有restore函数支持跨引擎恢复备份数据。

其他相关函数

  • getBackupList:查看某个分布式表的所有备份信息,返回一张表,每个分区对应一行记录。

  • getBackupMeta:查看某张表,某个分区的备份的信息,返回一个字典,包含schema, cid, path等信息。

  • loadBackup:加载指定分布式表中某个分区的备份数据。

示例

下面的例子创建了一个组合分区的数据库 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);

备份表pt的所有数据:

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

SQL元代码中可以添加where条件。例如,备份date>2017.08.10的数据。

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

查看表pt的备份信息:

$ getBackupList("/home/DolphinDB/backup","dfs://compoDB","pt");

加载20120810/0_50分区的备份信息到内存:

$ x = getBackupMeta("/home/DolphinDB/backup","dfs://compoDB/20170810/0_50","pt");

加载20120810/0_50分区的备份数据:

$ loadBackup("/home/DolphinDB/backup","dfs://compoDB/20170810/0_50","pt");

将表pt的数据恢复到新数据库dfs://db1的表pt中:

$ migrate("/home/DolphinDB/backup", "dfs://compoDB", "pt", "dfs://db1", "pt")

使用migrate函数无需自己创建新数据库,系统会自动创建新数据库。

在数据库 dfs://compoDB 中创建一个与pt结构相同的表temp:

$ temp=db.createPartitionedTable(t, `pt, `date`ID);

把pt中2017.08.10的所有分区的备份数据拷贝到与pt分区结构相同的temp表:

$ restore("/home/DolphinDB/backup","dfs://compoDB","pt","%20170810%",true,temp);