Doris进阶——数据备份与恢复
Doris官网:
Backup
Backup是将指定的表数据或者指定分区的数据以Doris的文件存储格式上传到远端仓库中,实现数据的备份。
备份原理:
当提交一个Backup任务后,会对指定表的数据或者表分区数据进行快照,相当于对当前文件进行一个硬链,快照后的对表的任何操作都不会影响快照的结果,最后由BE进行上传到远端仓库。当文件上传完成后,FE会将对应的元数据信息先写到本地,然后再通过broker的方式将元数据信息进行上传。
恢复原理:
提交Restore任务后,会根据指定的仓库以及snapshot的名称以及时间版本来确定需要恢复的文件,然后会创建对应的元数据,创建结构分区一致的表。然后会将创建的表进行一个快照,为了在Backed上产生对应的目录,用于接收从远端仓库下载的快照文件(由BE并发完成),最后下载完成后将这些快照映射为本地表的元数据,最后完成备份恢复。
注意:
-
备份恢复相关操作只允许ADMIN权限用户进行操作。 一个数据库中只允许由一个备份或恢复的任务。 数据量特别大时,可以通过来进行备份 合理规划分桶数量,Tablet过多会直接影响到备份的时效性 尽量不使用覆盖的方式恢复数据
备份示例:
-- 首先创建仓库 CREATE REPOSITORY `stu_snapshot` -- 仓库名 WITH BROKER `broker_name` -- broker名 ON LOCATION "hdfs://test01:8020/doris-out" -- 指定仓库路径 PROPERTIES ( "username" = "", "password" = "" ); -- 创建备份任务 BACKUP SNAPSHOT test.stu_snapshot_test -- 库名和备份任务名 TO `stu_snapshot` -- 远端仓库名 ON ( `students` -- 表名,可以指定分区(数据量太大建议通过分区进行备份) );
-
通过HELP BACKUP; 或者Doris官网查看更详细内容 查看Backup 任务的状态 :SHOW BACKUP 查看仓库中的备份:SHOW SNAPSHOT ON 仓库名 指定查询仓库中的snapshot : SHOW SNAPSHOT ON 仓库名 WHERE = "snapshot_name" 取消备份: CANCEL BACKUP FROM Database_name;
恢复示例:
RESTORE SNAPSHOT test.`stu_snapshot_test` -- 指定数据库名和备份名 FROM `stu_snapshot` -- 远端仓库名 ON ( `students` AS `snapshot_stu` ) -- 表名,通过AS可以修改表名 PROPERTIES ( "replication_num" = "1", -- 副本数 "backup_timestamp"= "2022-06-24-05-00-14" -- 对应时间 );
-
查看恢复任务:SHOW RESTORE [ FROM DB_NAME];
删除远端仓库DROP REPOSITORY repository_name
Mysqldump导出备份:
Doris1.0支持mysqldump工具导出表结构和数据。
-
导出test数据库中的students表:mysqldump -h127.0.0.1 -P 9030 -uroot --no-tablespaces --databases test --tables students > students2.sql 导出test数据库中的students表结构:mysqldump -h127.0.0.1 -P 9030 -uroot --no-tablespaces --databases test --tables students --no-data > students2.sql 导出test库中所有的表:mysqldump -h127.0.0.1 -P 9030 -uroot --no-tablespaces --databases test 导出所有数据库和表:mysqldump -h127.0.0.1 -P 9030 -uroot --no-tablespaces --all-databases 导出的sql文件可以source命令导入Doris中