# 数据备份恢复教程 DolphinDB database 提供了一系列函数,用于数据备份与恢复。数据备份和恢复时均以表的分区为单位。 ## 1. 备份 DolphinDB提供了[`backup`](https://www.dolphindb.cn/cn/help/FunctionsandCommands/FunctionReferences/b/backup.html)函数对分布式数据库进行备份。备份是以分区为单位进行的,可对指定数据表的部分或全部分区进行备份,支持全量备份或增量备份。 备份需要指定存放备份文件的路径 backupDir 与需要备份的数据(用 SQL 语句表示)。备份后,系统会在 `//` 目录下生成元数据文件 _metaData.bin 和数据文件 .bin,每个分区备份为一个数据文件。 下例说明如何备份数据库。 * 数据库的建库建表的脚本如下所示。采用复合分区,按天进行值分区,按照风机编号进行值分区。共有10台风机: ``` m = "tag" + string(decimalFormat(1..523,'000')) tableSchema = table(100:0,`wntId`insertDate join m, [INT,DATETIME] join take(FLOAT,523) ) db1 = database("",VALUE,2020.01.01..2020.12.30) db2 = database("",VALUE,1..10) db = database("dfs://ddb",COMPO,[db1,db2]) db.createPartitionedTable(tableSchema,"windTurbine",`insertDate`wntId) ``` * 写入2020.01.01~2020.01.03三天的数据后,备份前2天的数据,代码如下,其中 parallel 参数表示是否进行并行备份,是 DolphinDB 1.10.13/1.20.3 版本新增的功能: ``` backup(backupDir="/hdd/hdd1/backup/",sqlObj=,force=false,parallel=true) ``` 执行后返回结果10,说明备份了10个分区的数据。登录服务器,用 tree 命令列出目录的内容如下: ``` [xjqian@localhost windTurbine]$ tree /hdd/hdd1/backup/ -L 3 -t /hdd/hdd1/backup/ └── ddb └── windTurbine ├── 04eceea9-53d7-1389-4044-d31538025361 ├── 14ff1d37-2ea7-7596-d94d-12ecfd8be197 ├── 81f7236f-83b3-ef81-f648-3b8db67c04fa ├── 846aaf74-6c51-9a91-6c44-fb1e2cf93036 ├── bcb94ce8-0e06-2fad-b946-774fcedc978d ├── c38cb06c-fd7f-608a-b148-b0f6a9883c5c ├── e5993354-cd4d-3ab0-0e4b-ea331e68a2df ├── _metaData ├── 401136d4-1fcd-408c-b84b-20c2af7b3fe8 ├── 54076219-0904-97a2-1a4a-d076f35f76fe ├── b51f4f36-be16-cfad-a440-d04ac36b6791 ├── dolphindb.lock ├── 02ddcb20-8872-af9d-ca46-f42a42239c78 ├── 237e6e64-d62e-13bf-0443-fa7a974f7c42 ├── 4d04471d-fff8-2e9a-7742-a0228af21bad ├── 4e7e014f-1346-c4b0-264e-e9d15de494cb ├── 4f2aade8-97ce-bca9-934f-b0b10f0da1fe ├── 6256d8f2-cc53-7a87-5b43-6cce55b38933 ├── 77a4ac82-739c-389b-994b-22f84cb11417 ├── 8c27389b-4689-7697-d243-2b16dbca8354 ├── 8dd539b3-f3fc-b39c-6842-039dbec1ceb1 ├── 90a5af5f-1161-23af-ea42-877999866f44 ├── fd6b658c-47eb-e69e-164e-601c5b51daed ├── 167a9165-05ec-e093-b74a-c6121939ebf0 ├── 3afb5932-a8fa-9e93-ff4c-120c1223dcf6 ├── 62d47049-155d-83a7-af48-36c8969072a7 ├── b20422a9-487d-8eb7-7143-3597a3b44796 ├── 2ae9676f-dbe7-669a-7144-68a02572df3e ├── 4559d6db-bb7a-efb8-164e-3198127a7c3d ├── 72e15689-4bf7-44a9-b84e-16fb8e856a6d ├── 8652f2f0-9d60-40aa-4e44-9d77bd1309f6 └── e266ab82-6ef9-e289-d241-d9218be59dde 2 directories, 32 files ``` 可以看到数据文件比之前多了10个,恰好是2020年1月3日的完整数据。 * 每天备份 可用定时作业来实现。下面例子在每天凌晨00:05:00开始备份前一天的数据: ``` scheduleJob(`backupJob, "backupDB", backup{"/hdd/hdd1/backup/"+(today()-1).format("yyyyMMdd"),,true); ``` SQL 元代码中可以添加 where 条件。例如,备份 date>2017.08.10 的数据。 ``` backup("/home/DolphinDB/backup",