全部產品
Search
文件中心

AnalyticDB:通過外表匯入RDS MySQL資料

更新時間:Oct 18, 2025

您可以將RDS for MySQL的資料匯入AnalyticDB for MySQL,在AnalyticDB for MySQL中完成多來源資料整合和複雜查詢分析,也可以將經過匯總的關鍵計量寫入RDS for MySQL

前提條件

  • RDS for MySQL執行個體與AnalyticDB for MySQL叢集位於同一VPC。

  • 已將AnalyticDB for MySQL的VPC網段加入RDS for MySQL執行個體的白名單中。

  • AnalyticDB for MySQL企業版基礎版湖倉版數倉版彈性模式已在AnalyticDB for MySQL控制台叢集資訊頁面的網路資訊地區開啟ENI網路開關。

    重要

    開啟和關閉ENI網路會導致資料庫連接中斷大約2分鐘,無法讀寫。請謹慎評估影響後再開啟或關閉ENI網路。

資料準備

本文樣本的RDS for MySQL資料庫名為test_adb,並在該庫中建立了一張名為person的表,樣本如下:

CREATE TABLE goods (
   goods_id bigint(20) NOT NULL,
   price double NOT NULL,
   class bigint(20) NOT NULL,
   name varchar(32) NOT NULL,
   update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (goods_id)
);

person表中插入資料,樣本如下:

INSERT INTO test_adb.goods 
VALUES
  (1, 50, 1, 'Book', '2024-08-07 09:56:53'),
  (2, 80, 2, 'Basketball', '2024-08-08 10:00:55'),
  (3, 150, 3, 'Watch', '2024-08-06 11:00:25'),
  (4, 30, 1, 'Magazine', '2024-08-08 12:25:55'),
  (5, 80, 2, 'Football', '2024-08-07 08:50:35'),
  (6, 25, 4, 'Tea', '2024-08-05 09:25:30'),
  (7, 30, 4, 'Coffee', '2024-08-07 10:20:40'),
  (8, 300, 3, 'Computer', '2024-08-06 10:55:35'),
  (9, 100, 2, 'Baseball', '2024-08-08 11:35:50'),
  (10, 200, 3, 'Phone', '2024-08-07 11:30:25');

操作步驟

企業版、基礎版及湖倉版

  1. 進入SQL開發編輯器。

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

    2. 在左側導覽列,單擊作業開發 > SQL開發

  2. 引擎選擇XIHE,資源群組選擇Interactive型資源群組。

  3. 執行以下語句,建立外部資料庫。樣本如下:

    CREATE EXTERNAL DATABASE adb_external_db;
  4. 執行以下語句,建立外表。樣本如下:

    說明
    • AnalyticDB for MySQL外表和RDS MySQL中表的列名稱、數量、順序、欄位類型需要相同。

    • AnalyticDB for MySQL外表的參數說明,請參見CREATE EXTERNAL TABLE

    CREATE EXTERNAL TABLE IF NOT EXISTS  adb_external_db.goods (
        goods_id bigint(20) NOT NULL,
        price double NOT NULL,
        class bigint(20) NOT NULL,
        name varchar(32) NOT NULL,
        update_time timestamp,
        PRIMARY KEY (goods_id)
     )ENGINE = 'MYSQL' TABLE_PROPERTIES = '{
       "url":"jdbc:mysql://mysql-address:3306/test_adb",
       "tablename":"person",
       "username":"mysql-user-name",
       "password":"mysql-user-password",
       "charset":"utf8"
    }';
  5. 查詢資料。

    外表建立成功後,您可以在AnalyticDB for MySQL中通過SELECT查詢RDS MySQL中person表的資料。

    SELECT * FROM adb_external_db.goods;

    返回結果如下:

    +----------+-------+-------+------------+---------------------+
    | goods_id | price | class | name       | update_time         |
    +----------+-------+-------+------------+---------------------+
    |        2 |  80.0 |     2 | Basketball | 2024-08-08 10:00:55 |
    |       10 | 200.0 |     3 | Phone      | 2024-08-07 11:30:25 |
    |        1 |  50.0 |     1 | Book       | 2024-08-07 09:56:53 |
    |        6 |  25.0 |     4 | Tea        | 2024-08-05 09:25:30 |
    |        9 | 100.0 |     2 | Baseball   | 2024-08-08 11:35:50 |
    |        3 | 150.0 |     3 | Watch      | 2024-08-06 11:00:25 |
    |        5 |  80.0 |     2 | Football   | 2024-08-07 08:50:35 |
    |        7 |  30.0 |     4 | Coffee     | 2024-08-07 10:20:40 |
    |        8 | 300.0 |     3 | Computer   | 2024-08-06 10:55:35 |
    |        4 |  30.0 |     1 | Magazine   | 2024-08-08 12:25:55 |
    +----------+-------+-------+------------+---------------------+
  6. 執行以下語句,建立目標資料庫。

    CREATE DATABASE adb_demo;
  7. 執行以下語句,在目標資料庫adb_demo中建立一張名為mysql_import_test的目標表,用於儲存從RDS MySQL匯入的資料。

    CREATE TABLE IF NOT EXISTS  mysql_import_test (
            goods_id bigint(20) NOT NULL,
            price double NOT NULL,
            class bigint(20) NOT NULL,
            name varchar(32) NOT NULL,
            update_time timestamp,
            PRIMARY KEY (goods_id)
     )
    DISTRIBUTED BY HASH(goods_id);
  8. 執行以下語句,將RDS for MySQL執行個體中的資料匯入至目標AnalyticDB for MySQL叢集中。

    INSERT INTO mysql_import_test
    SELECT * FROM adb_external_db.goods;
  9. 執行以下語句,查詢AnalyticDB for MySQLmysql_import_test資料。

    SELECT * FROM mysql_import_test;

    返回結果如下:

    +----------+-------+-------+------------+---------------------+
    | goods_id | price | class | name       | update_time         |
    +----------+-------+-------+------------+---------------------+
    |        2 |  80.0 |     2 | Basketball | 2024-08-08 10:00:55 |
    |       10 | 200.0 |     3 | Phone      | 2024-08-07 11:30:25 |
    |        1 |  50.0 |     1 | Book       | 2024-08-07 09:56:53 |
    |        6 |  25.0 |     4 | Tea        | 2024-08-05 09:25:30 |
    |        9 | 100.0 |     2 | Baseball   | 2024-08-08 11:35:50 |
    |        3 | 150.0 |     3 | Watch      | 2024-08-06 11:00:25 |
    |        5 |  80.0 |     2 | Football   | 2024-08-07 08:50:35 |
    |        7 |  30.0 |     4 | Coffee     | 2024-08-07 10:20:40 |
    |        8 | 300.0 |     3 | Computer   | 2024-08-06 10:55:35 |
    |        4 |  30.0 |     1 | Magazine   | 2024-08-08 12:25:55 |
    +----------+-------+-------+------------+---------------------+

數倉版

  1. 串連目標AnalyticDB for MySQL叢集。詳細操作步驟,請參見串連叢集

  2. 建立目標資料庫。詳細操作步驟,請參見建立資料庫

    本樣本中,AnalyticDB for MySQL叢集的目標庫名為adb_demo

  3. 建立外表。

    使用以下命令在目標庫adb_demo中建立一張名為goods_external_table的外表。

    CREATE TABLE IF NOT EXISTS goods_external_table (
            goods_id bigint(20) NOT NULL,
            price double NOT NULL,
            class bigint(20) NOT NULL,
            name varchar(32) NOT NULL,
            update_time timestamp,
            PRIMARY KEY (goods_id)
     )
            ENGINE='mysql'  
            TABLE_PROPERTIES='{  
            "url":"jdbc:mysql://mysql-vpc-address:3306/test_adb",  
            "tablename":"goods",  
            "username":"mysql-user-name",  
            "password":"mysql-user-password",
            "charset":"utf8"
      }';

    參數

    說明

    ENGINE='mysql'

    外部表格的儲存引擎說明,本文使用的是MySQL。

    TABLE_PROPERTIES

    AnalyticDB for MySQL訪問RDS for MySQL資料的訪問方式。

    url

    RDS for MySQL執行個體中的內網地址(即VPC串連地址)和源庫名(本文樣本中為test_adb)。RDS for MySQL地址資訊的查看方法,請參見查看或修改內外網地址和連接埠

    格式:"jdbc:mysql://mysql-vpc-address:3306/rds-database-name"

    樣本:jdbc:mysql://rm-bp1hem632****.mysql.rds.aliyuncs.com:3306/test_adb

    tablename

    RDS for MySQL中源表名,本文樣本中為goods

    username

    RDS for MySQL資料庫帳號。

    password

    RDS for MySQL資料庫帳號的密碼。

    charset

    MySQL字元集,取值說明:

    • gbk

    • utf8(預設值)

    • utf8mb4

  4. 建立目標表。

    使用以下命令在目標資料庫adb_demo中建立一張名為mysql_import_test的目標表,用於儲存從RDS for MySQL匯入的資料。

    CREATE TABLE IF NOT EXISTS  mysql_import_test (
            goods_id bigint(20) NOT NULL,
            price double NOT NULL,
            class bigint(20) NOT NULL,
            name varchar(32) NOT NULL,
            update_time timestamp,
            PRIMARY KEY (goods_id)
     )
    DISTRIBUTED BY HASH(goods_id);
  5. 將源RDS MySQL執行個體中的資料匯入至目標AnalyticDB for MySQL叢集中。

    REPLACE INTO mysql_import_test
    SELECT * FROM goods_external_table;
  6. 匯入完成後,您可以登入AnalyticDB for MySQL的目標庫adb_demo中,執行如下命令查看並驗證源表資料是否成功匯入至目標mysql_import_test表中:

    SELECT * FROM mysql_import_test LIMIT 100;

    返回結果如下:

    +----------+-------+-------+------------+---------------------+
    | goods_id | price | class | name       | update_time         |
    +----------+-------+-------+------------+---------------------+
    |        2 |  80.0 |     2 | Basketball | 2024-08-08 10:00:55 |
    |       10 | 200.0 |     3 | Phone      | 2024-08-07 11:30:25 |
    |        1 |  50.0 |     1 | Book       | 2024-08-07 09:56:53 |
    |        6 |  25.0 |     4 | Tea        | 2024-08-05 09:25:30 |
    |        9 | 100.0 |     2 | Baseball   | 2024-08-08 11:35:50 |
    |        3 | 150.0 |     3 | Watch      | 2024-08-06 11:00:25 |
    |        5 |  80.0 |     2 | Football   | 2024-08-07 08:50:35 |
    |        7 |  30.0 |     4 | Coffee     | 2024-08-07 10:20:40 |
    |        8 | 300.0 |     3 | Computer   | 2024-08-06 10:55:35 |
    |        4 |  30.0 |     1 | Magazine   | 2024-08-08 12:25:55 |
    +----------+-------+-------+------------+---------------------+