通过OBS协议备份恢复Doris业务数据
应用场景
为了确保Doris数据安全,避免因表目录或文件损坏导致集群不可用,或在执行表迁移等重大操作时,需备份数据。从而保证系统在出现异常或未达到预期结果时可以及时恢复数据,对业务的影响降到最低。
操作流程:
约束限制
- 该操作仅适用于Doris 2.0.5以上引擎版本。
- 该操作仅适用于Doris存算一体集群。
- 备份恢复目前只允许拥有admin权限的用户执行。
- 一个数据库中只允许有一个正在执行的备份作业。
准备工作
- 已注册华为账号并开通华为云,具体请参见注册华为账号并开通华为云,且在使用CloudTable前检查账号状态,账号不能处于欠费或冻结状态。
- 已创建虚拟私有云和子网,参见创建虚拟私有云和子网。
- 已创建Doris集群,并正常运行。
- Doris集群已安装MySQL客户端,具体请参见安转MySQL客户端。
步骤一:创建OBS文件系统并获取AK/SK
创建OBS并行文件系统
- 登录对象存储服务控制台。
- 选择左侧导航栏“并行文件系统”,进入并行文件系统管理页面。
- 单击页面右上角“创建并行文件系统”,进入创建页面。
- 配置“基础配置”、“并行文件系统配置”、“功能配置”,确认参数无误,单击“立即创建”。具体请参见创建并行文件系统章节。
- 企业项目需要和Doris集群保持一致。
- 如果设置私有桶,请在权限控制中创建访问策略。
- 在并行文件系统列表中单击新建的并行文件系统名称,单击“概览”,查看并记录“Endpoint”信息。
获取AK/SK
步骤二:备份Doris集群数据
- 使用SSH登录工具,通过弹性IP远程登录到Linux弹性云服务器。
具体登录操作步骤请参见弹性云服务器《用户指南》中的“ SSH密码方式登录”章节。
- 连接Doris集群。具体请参见使用MySQL客户端连接Doris普通集群。
./mysql -uadmin -ppassword -h集群内网地址 -P9030
- 创建仓库example_repo。
CREATE REPOSITORY `example_repo` WITH OBS ON LOCATION "obs://cloudtable-test-obs/backup" PROPERTIES ( "obs.endpoint"="***", "obs.access_key"="***", "obs.secret_key"="***" );
- example_repo:在OBS中创建的存储仓库,用于备份数据。
- ON LOCATION:指定OBS上的存储路径。
- 查看已创建的仓库。
SHOW REPOSITORIES;
显示结果如下,表示仓库创建成功。
+--------+--------------+---------------------+------------+---------------------+--------+------+--------+ | RepoId | RepoName | CreateTime | IsReadOnly | Location | Broker | Type | ErrMsg | +--------+--------------+---------------------+------------+---------------------+--------+------+--------+ | 10785 | example_repo | 2025-07-29 11:38:27 | false | obs://z125-n/BUCKUP | - | OBS | NULL | +--------+--------------+---------------------+------------+---------------------+--------+------+--------+
- 全量备份数据表demo数据库下的表到仓库example_repo中。
BACKUP SNAPSHOT demo.snapshot_label1 TO example_repo ON (example_tbl) PROPERTIES ("type" = "full");
- demo.snapshot_label1:为备份快照名称。
- TO example_repo:指定将快照备份到名为“example_repo”的仓库中。
- ON (example_tbl):指定备份对象。
- type:指备份的类型。full:全量备份,适用于首次备份和定期完整备份。
- 执行以下命令查看BACKUP作业执行情况。
show BACKUP;
- 在远端仓库中查看备份是否成功。
SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label1";
- ON example_repo:指定要查询的存储库名称为example_repo。
- snapshot_label1:为所查询的快照名称。
显示结果如下表示在远端仓库中备份数据成功。
+-----------------+---------------------+--------+ | Snapshot | Timestamp | Status | +-----------------+---------------------+--------+ | snapshot_label1 | 2025-07-29-14-18-54 | OK | +-----------------+---------------------+--------+
步骤三:恢复Doris集群数据
- 使用SSH登录工具,通过弹性IP远程登录到Linux弹性云服务器。
具体登录操作步骤请参见弹性云服务器《用户指南》中的“ SSH密码方式登录”章节。
- 连接Doris集群。具体请参见使用MySQL客户端连接Doris普通集群。
./mysql -uadmin -ppassword -h集群内网地址 -P9030
- 创建仓库example_repo(选)。
- 在同一个集群不同数据库进行备份恢复时,只需在备份数据集群创建仓库example_repo。
- 不同集群进行备份恢复数据时,需要在恢复数据集群中创建仓库example_repo。
CREATE REPOSITORY `example_repo` WITH OBS ON LOCATION "obs://cloudtable-test-obs/backup" PROPERTIES ( "obs.endpoint"="***", "obs.access_key"="***", "obs.secret_key"="***" );
- 从远端已备份数据仓库中恢复数据。从example_repo中恢复demo中的表example_tbl到数据库demo1中。
RESTORE SNAPSHOT demo1.`snapshot_label1` FROM `example_repo` ON ( `example_tbl` ) PROPERTIES ( "backup_timestamp"="2023-08-16-20-13-55", "replication_num" = "3" );
“backup_timestamp”可通过以下命令获取:
SHOW SNAPSHOT ON example_repo WHERE SNAPSHOT = "snapshot_label1";
- 执行以下命令查看恢复作业的执行情况。
SHOW RESTORE\G;
- 在demo1数据库中查看恢复的数据表。如果显示example_tbl数据表,证明数据恢复成功。
show tables; +-----------------+ | Tables_in_demo1 | +-----------------+ | example_tbl | +-----------------+