全部產品
Search
文件中心

AnalyticDB:基於PolarDB和AnalyticDB構建即時資料倉庫

更新時間:Mar 25, 2026

本文介紹如何利用PolarDB for MySQLAnalyticDB for MySQL構建高效能即時資料倉庫。通過資料同步技術,實現資料的高效傳輸與即時分析;同時,藉助冷熱分離儲存技術,顯著降低儲存成本,滿足企業對效能與成本的雙重需求。

前提條件

  • AnalyticDB for MySQL叢集與PolarDB for MySQL叢集位於同一地區且所屬同一VPC

  • AnalyticDB for MySQL叢集的儲存空間須大於PolarDB MySQL版叢集佔用的儲存空間。

樣本資料

本文樣本的PolarDB for MySQL資料庫名為DB1,並在該庫中建立了一個名為sales_range_columns的分區表。該表以create_date作為分區鍵,共包含12個分區,12條資料。

-- 建立資料庫
CREATE DATABASE IF NOT EXISTS DB1;

-- 建立分區表
CREATE TABLE sales_range_columns (
    dept_no INT(11) NOT NULL AUTO_INCREMENT,
    part_no INT(11) DEFAULT NULL,
    country VARCHAR(20) DEFAULT NULL,
    create_date DATE NOT NULL,
    amount INT(11) DEFAULT NULL,
    PRIMARY KEY (dept_no, create_date)
)
ENGINE=InnoDB
AUTO_INCREMENT=1000001
DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE COLUMNS(create_date) (
    PARTITION p1 VALUES LESS THAN ('2024-01-01') ENGINE = InnoDB,
    PARTITION p2 VALUES LESS THAN ('2024-02-01') ENGINE = InnoDB,
    PARTITION p3 VALUES LESS THAN ('2024-03-01') ENGINE = InnoDB,
    PARTITION p4 VALUES LESS THAN ('2024-04-01') ENGINE = InnoDB,
    PARTITION p5 VALUES LESS THAN ('2024-05-01') ENGINE = InnoDB,
    PARTITION p6 VALUES LESS THAN ('2024-06-01') ENGINE = InnoDB,
    PARTITION p7 VALUES LESS THAN ('2024-07-01') ENGINE = InnoDB,
    PARTITION p8 VALUES LESS THAN ('2024-08-01') ENGINE = InnoDB,
    PARTITION p9 VALUES LESS THAN ('2024-09-01') ENGINE = InnoDB,
    PARTITION p10 VALUES LESS THAN ('2024-10-01') ENGINE = InnoDB,
    PARTITION p11 VALUES LESS THAN ('2024-11-01') ENGINE = InnoDB,
    PARTITION p12 VALUES LESS THAN ('2024-12-01') ENGINE = InnoDB
);

-- 插入12條資料
INSERT INTO sales_range_columns (part_no, country, create_date, amount) VALUES
(101, 'USA', '2024-01-15', 500),
(102, 'UK', '2024-02-20', 700),
(103, 'Germany', '2024-03-10', 600),
(104, 'France', '2024-04-05', 800),
(105, 'Japan', '2024-05-25', 900),
(106, 'China', '2024-06-15', 1000),
(107, 'India', '2024-07-05', 1100),
(108, 'Brazil', '2024-08-20', 1200),
(109, 'Canada', '2024-09-10', 1300),
(110, 'Australia', '2024-10-25', 1400),
(111, 'Italy', '2024-11-15', 1500),
(112, 'Spain', '2024-11-30', 1600);

步驟一:開啟PolarDB for MySQL叢集的Binlog功能

重要

開啟 Binlog 後叢集會自動重啟,重啟任務會在 5 分鐘之內完成。重啟時服務閃斷時間在 40 秒左右,具體時間與資料量和表數量相關,建議您在業務低穀期進行操作並確保應用程式具備重連機制。

  1. 登入PolarDB控制台,在左側導覽列單擊集群列表,選擇叢集所在地區,並單擊目的地組群ID進入叢集詳情頁。

  2. 您可以通過以下兩種方式中的任意一種來開啟Binlog:

    • 方式一:

      1. 進入叢集的Binlog管理頁面。

        image

      2. 單擊立即開啟按鈕。

      3. 開啟Binlog對話方塊中,選擇生效方式為立即生效定時生效

        若選擇定時生效,請指定具體的生效時間。

        image

      4. 單擊确定

    • 方式二:通過設定參數loose_polar_log_bin的值來開啟Binlog。

      1. 在左側導覽列中選擇配置与管理 > 参数配置

      2. 找到目標參數loose_polar_log_bin,修改參數值。具體操作請參見修改參數值

        說明
        • 若您的PolarDB MySQL版叢集版本為MySQL 5.6,當前值修改為ON_WITH_GTID

        • 若您的PolarDB MySQL版叢集版本為MySQL 5.7或MySQL 8.0,當前值修改為ON

步驟二:資料同步

您可以選擇以下任意一種方式,將PolarDB for MySQL叢集的庫表結構、全量資料、增量資料同步至AnalyticDB for MySQL

使用DTS

若您需要高度定製化控制(如過濾欄位、跨地區同步或特殊容錯策略),可以使用DTS同步資料。

說明

更多詳細操作及相關參數參見PolarDB MySQL版同步至AnalyticDB MySQL 3.0

  1. 進入目標地區的同步工作清單頁面(二選一)。

    通過DTS控制台進入

    1. 登入Data Transmission Service控制台

    2. 在左側導覽列,單擊資料同步

    3. 在頁面左上方,選擇同步執行個體所屬地區。

    通過DMS控制台進入

    說明

    實際操作可能會因DMS的模式和布局不同,而有所差異。更多資訊,請參見極簡模式控制台自訂DMS介面布局與樣式

    1. 登入Data Management服務

    2. 在頂部功能表列中,選擇Data + AI > 資料轉送(DTS) > 資料同步

    3. 同步任務右側,選擇同步執行個體所屬地區。

  2. 單擊創建任務,進入任務配置頁面。

  3. 配置源庫及目標庫資訊。

    類別

    配置

    說明

    源庫資訊

    資料庫類型

    選擇PolarDB for MySQL

    接入方式

    選擇雲執行個體

    執行個體地區

    選擇源PolarDB MySQL版叢集所屬地區。

    PolarDB執行個體ID

    選擇源PolarDB MySQL版叢集ID。

    資料庫帳號

    填入源PolarDB MySQL版叢集的資料庫帳號,需具備待同步對象的讀許可權。

    資料庫密碼

    填入該資料庫帳號對應的密碼。

    目標庫資訊

    資料庫類型

    選擇AnalyticDB MySQL 3.0

    接入方式

    選擇雲執行個體

    執行個體地區

    選擇目標雲原生資料倉儲AnalyticDB MySQL版 3.0叢集所屬地區。

    執行個體ID

    選擇目標雲原生資料倉儲AnalyticDB MySQL版 3.0叢集ID。

    資料庫帳號

    填入目標雲原生資料倉儲AnalyticDB MySQL版 3.0叢集的資料庫帳號,需具備讀寫權限。

    資料庫密碼

    填入該資料庫帳號對應的密碼。

  4. 配置任務對象。

    類別

    配置

    說明

    對象配置

    同步類型

    預設全部勾選。

    執行個體層級選擇所需同步的DDL和DML

    預設全部勾選。

    源庫對象

    源庫對象框中單擊待同步對象,然後單擊向右將其移動至已選擇對象框。

    進階配置

    -

    保持預設選項。

    資料校正

    -

    保持預設選項。

    庫表列配置

    定義狀態

    選擇全部

    分布鍵

    刪除create_date

    分區鍵

    選擇create_date

    分區規則

    選擇yyyyMMdd

  5. 配置完上述所有參數後,請單擊下一步儲存任務並預檢查

  6. 預檢查通過,單擊下一步購買

  7. 勾選服務條款,單擊購買並啟動,並在彈出的確認對話方塊,單擊確定

使用AnalyticDB for MySQL的無感整合(Zero-ETL)

若您追求快速構建業務系統和資料倉儲之間的資料同步鏈路,推薦使用AnalyticDB for MySQL的無感整合功能。

說明

更多詳細操作及相關參數參見通過無感整合(Zero-ETL)同步資料

  1. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,然後單擊目的地組群ID。

  2. 進入無感整合(Zero-ETL)功能頁面,不同的產品系列功能入口不同。

    • 企業版、基礎版或湖倉版叢集:在左側導覽列,選擇數據接入 > DB數據同步

    • 數倉版叢集:在左側導覽列,選擇數據傳輸服務 > 無感數據集成

  3. 單擊建立Zero-ETL任務,在建立Zero-ETL任務頁面配置源庫資訊和目標庫資訊。

    類別

    配置

    說明

    源庫資訊

    任務名稱

    Zero-ETL任務名稱。

    資料庫類型

    選擇PolarDB for MySQL

    接入方式

    選擇雲執行個體接入

    執行個體地區

    PolarDB for MySQL執行個體所屬地區。

    Polar執行個體ID

    PolarDB for MySQL執行個體ID。

    資料庫帳號

    PolarDB for MySQL執行個體的資料庫帳號。

    資料庫密碼

    PolarDB for MySQL執行個體資料庫帳號的密碼。

    目標庫資訊

    資料庫類型

    選擇AnalyticDB MySQL 3.0

    接入方式

    選擇雲執行個體接入

    執行個體地區

    AnalyticDB for MySQL叢集所屬的地區。

    執行個體ID

    AnalyticDB for MySQL的叢集ID。

    資料庫帳號

    AnalyticDB for MySQL叢集的資料庫帳號。

    資料庫密碼

    AnalyticDB for MySQL叢集資料庫帳號的密碼。

  4. 配置Zero-ETL。

    設定項目

    說明

    同步類型

    預設全部勾選。

    執行個體層級選擇所需同步的DDL和DML

    預設全部勾選。

    源庫對象

    源庫對象框中單擊待同步對象,然後單擊向右將其移動至已選擇對象框。

  5. 配置庫表欄位。

    庫表欄位配置

    說明

    定義狀態

    選擇全部

    分布鍵

    刪除create_date

    分區鍵

    選擇create_date

    分區規則

    選擇yyyyMMdd

  6. 配置完上述所有參數後,請單擊下一步儲存任務並預檢查

  7. 預檢查通過,單擊啟動,啟動Zero-ETL任務。

步驟三:驗證資料一致性

當同步鏈路的狀態為運行中時,可以驗證資料一致性。

全量資料同步

  1. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,然後單擊目的地組群ID。

  2. 單擊頁面上方的登入資料庫

    頁面將會跳轉至DMS控制台,並彈出登入執行個體的提示框。

  3. 輸入資料庫帳號資料庫密碼,單擊登入

  4. 選擇AnalyticDB for MySQL左側資料庫執行個體已登入執行個體中的資料庫DB1,檢查表結構和記錄總數,以確認與PolarDB for MySQL中資料庫的資料一致性。

    -- 查看錶結構
    SHOW CREATE TABLE sales_range_columns;
    -- 統計表內資料記錄總數
    SELECT COUNT(*) FROM sales_range_columns

增量資料同步

新增分區

  1. PolarDB for MySQL表中添加一個分區p13

    -- 增加一個分區
    ALTER TABLE sales_range_columns ADD PARTITION (PARTITION p13 VALUES LESS THAN ('2025-01-01'));
  2. 查看PolarDB for MySQL表的分區數,已從12個變為13個。

    -- 查看現有分區,確認新分區已增加
    SHOW CREATE TABLE sales_range_columns;

    返回結果:

    image

  3. PolarDB for MySQL新增分區中寫入1條資料。

    INSERT INTO sales_range_columns (part_no, country, create_date, amount) VALUES
    (113, 'USA', '2024-12-15', 1700);
  4. 統計PolarDB for MySQL表新增分區內資料記錄總數。

    -- 統計新增分區內的資料記錄總數
    SELECT COUNT(*) FROM sales_range_columns PARTITION (p13);

    返回結果:

    image

  5. 待資料同步後,須確保該表成功觸發並完成BUILD任務。隨後查看AnalyticDB for MySQL對應表存在新增分區20241215,且該分區的row_count值為1,與PolarDB for MySQL資料完全一致,表明增量資料同步已成功。

    SELECT
        partition_id,          -- 分區名
        row_count,             -- 分區總行數
        local_data_size,       -- 分區本機存放區所佔用空間大小
        index_size,            -- 分區的索引大小
        pk_size,               -- 分區的主鍵索引大小
        remote_data_size       -- 分區的遠端儲存所佔用空間大小
    FROM
        information_schema.kepler_partitions
    WHERE
        schema_name = 'db1'
        AND table_name = 'sales_range_columns' 
        AND partition_id > 0;

    返回結果:

    image

新增列

  1. PolarDB for MySQL表中添加一列。

    -- 新增一列
    ALTER TABLE sales_range_columns ADD COLUMN new_col INT(11);
  2. PolarDB for MySQL表中查看最新表結構。返回結果中存在'new_col' INT(11) DEFAULT NULL,則表明已成功新增列。

    -- 查看最新表結構
    SHOW CREATE TABLE sales_range_columns;

    返回結果:

    image

  3. AnalyticDB for MySQL中查看最新表結構。返回結果中存在'new_col' INT,表明資料同步成功。

    -- 查看錶結構
    SHOW CREATE TABLE sales_range_columns;

    返回結果:

    image

步驟四:指定冷熱分離儲存策略

為保證近期資料的查詢效能並降低歷史資料的儲存成本,請按以下步驟對AnalyticDB for MySQL中的表設定冷熱分離:

  1. 指定儲存策略。執行以下SQL語句,設定表的儲存策略為mixed(冷熱混合儲存),並將最近6個月資料保留在熱儲存中,其餘歷史資料移轉至冷儲存。

    -- 修改儲存策略
    ALTER TABLE sales_range_columns storage_policy = 'mixed', hot_partition_count = 6;

    變更冷熱階層式存放區策略後,需要該表再次觸發並完成BUILD任務後,新的儲存策略才會生效。

  2. 監控遷移進度。執行以下SQL語句,查看冷熱分離任務狀態。

    -- 查看遷移進度
    SELECT 
        table_name,                -- 表名
        source_storage_policy,     -- 原始儲存策略
        dest_storage_policy,       -- 目標儲存策略
        progress,                  -- 進度(百分比)
        status                     -- 當前任務狀態
    FROM 
        information_schema.storage_policy_modify_progress;

    任務狀態(status):

    • INIT:任務初始化,表示冷熱分離儲存策略已提交但尚未開始執行。

    • RUNNING:任務執行中,表示資料正在從熱儲存向冷儲存遷移。

    • FINISH:任務完成,表示冷熱分離儲存策略已成功應用,資料分布調整完畢。

  3. 驗證儲存策略生效。執行以下SQL語句,查看錶當前儲存策略是否生效。

    -- 查看最新表結構
    SHOW CREATE TABLE sales_range_columns;

    查詢結果顯示STORAGE_POLICY='MIXED' HOT_PARTITION_COUNT=6,表明冷熱分離儲存策略已成功生效。