全部產品
Search
文件中心

:DMS周期從RDS載入資料到OSS

更新時間:Jun 30, 2024

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

背景資訊

說明 如下內容以任務編排(老)功能操作樣本。任務編排(老)功能已下線,詳細資料,請參見【通知】下線任務編排(老)和數倉開發(老)功能
DMS是阿里雲提供的資料操作、資料安全管理以及資料開發的Web服務平台。DMS提供資料庫用戶端的功能,支援多種資料來源(MySQL,PostgreSQL,SQLServer,Oracle,Redis以及MongoDB等),實現統一的許可權管理,支援資料庫穩定的變更,同時整合了資料開發功能(包括數倉開發模式和任務編排模式)。1

DMS資料開發使用情境

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

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/'
)
3

準備工作

首先,我們需要在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());
4

實現任務流

  1. 建立新任務流。
    在DMS中的資料處理站/任務編排裡,建立一個新的任務流:rds_data_to_oss。5
  2. 建立DLA-SQL任務節點。

    在任務流rds_data_to_oss中,依次建立三個DLA-SQL任務節點:

    1. 建立RDS同步schema:在DLA中建立scheme mapping到RDS。
    2. 建立OSS備份表:在DLA-OSS建立備份表,用於儲存歷史資料。
    3. 備份資料:實現前一天資料的備份。
    6
  3. 實現建立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/16 IP位址區段。

    7
  4. 實現建立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/';
    8
  5. 實現資料備份節點。

    資料備份節點需要配置時間變數,編寫備份SQL以及選擇目標資料庫為DLA的demo_schema。

    • 配置時間變數。
      配置三個時間變數,它們分別是:
      • year:當前日期前一天的年份(格式為yyyy)
      • month:當前日期前一天的月份(格式為MM)
      • day:當前日期前一天的日(格式為dd)
      8
    • 資料備份步驟。
      資料備份節點實現步驟如下:
      • 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。

    • 資料備份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;
  6. 運行任務流。

    點擊左上方的試運行,運行任務流,在SQLConsole中查詢DLA-OSS中的備份表oss_orders。

    運行任務流
  7. 周期調度配置。

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

    周期任務配置

注意事項

  • RDS中的orders表,以及DLA OSS中的demo_schema需要事先準備好。
  • orders表中需要有一列或者多列記錄資料插入的時間。
  • orders表資料插入在安全協同模式下,需要申請更改許可權以及調整安全規則以允許在SQLConsole中運行。
  • 所有任務節點的SQL內容在安全協同模式下,需要申請許可權以及調整安全規則以便其正常運行。

總結

本文介紹了在DMS中從RDS中周期備份歷史資料到DLA-OSS中用例的詳細步驟,實現了RDS的到期歷史資料周期備份的目標。該用例能夠有效保障RDS的穩定性和效能,同時降低了資料存放區成本,它體現了DMS在冷資料備份方面強大的能力。

正如前文介紹,DMS資料開發功能能夠用於多種情境,OSS冷資料備份只是其中一個,單擊功能概覽,您將瞭解更多關於DMS的詳細資料。