本文將介紹DMS資料開發如何?從RDS備份歷史資料到OSS的步驟。
背景資訊

DMS資料開發使用情境
- 離線資料:T+1報表。
- 即時資料:五分鐘即時報表。
- 智能資料:直接對接AI計算等架構。
- 冷資料:冷資料OSS定期備份。
- 交易資料:大批量資料定期刪除、更新。

DMS冷資料(到期歷史資料)備份
出於系統穩定性,效能以及成本的考慮,RDS中的資料都有生命週期,冷資料以及到期歷史資料需要定期從RDS中移除。這些冷資料以及到期歷史資料可能在未來其他情境中應用到,比如:記錄查詢,長期資料採礦等等,不能直接被刪除,所以需要將這些資料存放區到更加便宜的介質中。阿里雲的DLA-OSS提供了類SQL的寫入/讀取語言,使用低成本的儲存OSS,可以實現這類歷史資料、冷資料的儲存。
DMS提供的資料庫管理能力能夠同時管理RDS以及DLA-OSS,一站式地實現從RDS備份資料到DLA-OSS中。同時,DMS提供的任務編排功能,能夠定期備份RDS中的冷資料到DLA-OSS。
案例背景
本文檔提供一個具體案例,該案例將RDS中一個表orders中的資料,按天備份資料到DLA-OSS中的demo_schema。每天5點備份前一天的資料。orders的表結構如下:
create table orders(
order_id bigint,
product_name varchar(32),
price double,
total_amount double,
created_date date
);demo_schema建立DLA-SQL如下:
CREATE DATABASE demo_schema
WITH DBPROPERTIES (
catalog = 'oss',
location = 'oss://xxxxxx/dla_demo/'
)
準備工作
首先,我們需要在orders表中準備一些資料,這些資料通過SQLConsole直接插入:
insert into orders values(1, 'product1', 1.0, 10.9, date_add(curdate(), interval -1 day));
insert into orders values(2, 'product1', 2.0, 20.9, date_add(curdate(), interval -1 day));
insert into orders values(3, 'product1', 3.0, 30.9, date_add(curdate(), interval -1 day));
insert into orders values(4, 'product1', 4.0, 40.9, date_add(curdate(), interval -1 day));
insert into orders values(5, 'product1', 5.0, 50.9, curdate());
insert into orders values(6, 'product1', 6.0, 60.9, curdate());
insert into orders values(7, 'product1', 7.0, 70.9, curdate());
insert into orders values(8, 'product1', 8.0, 80.9, curdate());
實現任務流
- 建立新任務流。在DMS中的資料處理站/任務編排裡,建立一個新的任務流:rds_data_to_oss。

- 建立DLA-SQL任務節點。
在任務流rds_data_to_oss中,依次建立三個DLA-SQL任務節點:
- 建立RDS同步schema:在DLA中建立scheme mapping到RDS。
- 建立OSS備份表:在DLA-OSS建立備份表,用於儲存歷史資料。
- 備份資料:實現前一天資料的備份。

- 實現建立RDS同步Schema節點。
建立RDS同步Schema節點用於建立一個指向RDS的scheme: dla_mysql_rds。目標資料庫為DLA中的demo_schema。建立dla_mysql_rds可以實現DLA直接中RDS中讀取資料。
CREATE SCHEMA if not exists dla_mysql_rds WITH DBPROPERTIES ( CATALOG = 'mysql', LOCATION = 'jdbc:mysql://xxxxxx.rds.aliyuncs.com:3306/dmstest', USER = 'dmstest', PASSWORD = 'xxxxxxxxx', INSTANCE_ID = 'xxxxxxxxx', VPC_ID = 'xxxxxxxxx' ); msck repair database dla_mysql_rds;建立RDS同步Schema節點用於建立一個指向RDS的schema之前,需要將IP位址區段
100.104.0.0/16加入到RDS的白名單列表中,具體方法,請參見添加DMS IP地址。由於RDS執行個體位於VPC內,預設情況下DLA無法訪問VPC中的資源。為了讓DLA能訪問RDS,需要利用VPC反向訪問技術,即在RDS白名單中添加100.104.0.0/16IP位址區段。
- 實現建立OSS備份表節點。建立OSS備份表節點在DLA-OSS中建立儲存來自RDS表orders中資料的備份表oss_orders,該表的結構與RDS中的orders表完全一致,oss_orders為分區表,按照年/月/日(y/m/d)分區:
CREATE EXTERNAL TABLE oss_orders ( order_id bigint, product_name varchar(32), price double, total_amount double, created_date date) PARTITIONED BY (y string, m string, d string) STORED AS TEXTFILE LOCATION 'oss://xxxxxx/dla_demo/';
- 實現資料備份節點。
資料備份節點需要配置時間變數,編寫備份SQL以及選擇目標資料庫為DLA的demo_schema。
- 配置時間變數。配置三個時間變數,它們分別是:
- year:當前日期前一天的年份(格式為yyyy)
- month:當前日期前一天的月份(格式為MM)
- day:當前日期前一天的日(格式為dd)

- 資料備份步驟。資料備份節點實現步驟如下:
- DLA OSS中建立暫存資料表。
暫存資料表oss_orders_tmp映射位置為oss_orders所在OSS之下的年/月/日目錄中,暫存資料表自動成為oss_orders一個分區。暫存資料表與oss_orders結構一致。暫存資料表所在具體位置與當前日期有關。
- 備份日資料。
直接使用insert-select SQL語句從dla_mysql_rds.orders中讀取資料,寫入OSS中的暫存資料表。
- 更新分區資訊以及刪除暫存資料表。
更新oss_orders中繼資料資訊,載入暫存資料表資料到oss_orders。刪除暫存資料表oss_orders_tmp。
- DLA OSS中建立暫存資料表。
- 資料備份SQL語句。
/* 建立暫存資料表 */ CREATE EXTERNAL TABLE oss_orders_tmp ( order_id bigint, product_name varchar(32), price double, total_amount double, created_date date) STORED AS TEXTFILE LOCATION 'oss://xxxxxx/dla_demo/y=${year}/m=${month}/d=${day}' TBLPROPERTIES('auto.create.location'= 'true'); /* 備份日資料 */ insert into oss_orders_tmp SELECT * FROM mysql_rds_to_oss.orders where DATE_FORMAT(created_date, '%Y') = '${year}' and DATE_FORMAT(created_date, '%m') = '${month}' and DATE_FORMAT(created_date, '%d') = '${day}'; /* 更新備份表分區資訊以及刪除暫存資料表 */ msck repair table oss_orders; drop table oss_orders_tmp;
- 配置時間變數。
- 運行任務流。
點擊左上方的試運行,運行任務流,在SQLConsole中查詢DLA-OSS中的備份表oss_orders。

- 周期調度配置。
試運行確定任務流正確以後,點擊任務流空白處,調出調度配置頁面,設定每天淩晨5點定期調度運行該任務流。

注意事項
- RDS中的orders表,以及DLA OSS中的demo_schema需要事先準備好。
- orders表中需要有一列或者多列記錄資料插入的時間。
- orders表資料插入在安全協同模式下,需要申請更改許可權以及調整安全規則以允許在SQLConsole中運行。
- 所有任務節點的SQL內容在安全協同模式下,需要申請許可權以及調整安全規則以便其正常運行。
總結
本文介紹了在DMS中從RDS中周期備份歷史資料到DLA-OSS中用例的詳細步驟,實現了RDS的到期歷史資料周期備份的目標。該用例能夠有效保障RDS的穩定性和效能,同時降低了資料存放區成本,它體現了DMS在冷資料備份方面強大的能力。
正如前文介紹,DMS資料開發功能能夠用於多種情境,OSS冷資料備份只是其中一個,單擊功能概覽,您將瞭解更多關於DMS的詳細資料。