AnalyticDB for MySQL支援通過外表匯入匯出資料。本文介紹如何通過AnalyticDB for MySQL數倉版的外表匯出資料至ECS自建MySQL。
前提條件
已建立與AnalyticDB for MySQL叢集相同地區、相同VPC的ECS執行個體。
已在ECS執行個體中安裝自建MySQL。
已在ECS執行個體的安全性群組中對自建MySQL的連接埠3306入方向進行授權。詳情請參見添加安全性群組規則。
已在ECS自建MySQL上完成建立資料庫並準備好相關測試資料等操作。
本文樣本中,測試所用的ECS自建MySQL目標庫名為
test_adb,並在該庫中建立了一張名為courses的目標表,用於儲存從AnalyticDB for MySQL叢集中匯出的資料。建表語句如下:CREATE TABLE courses ( id bigint NOT NULL, name varchar(32) NOT NULL, grade varchar(32) NOT NULL, submission_date timestamp NOT NULL, PRIMARY KEY (id) );如果您的AnalyticDB for MySQL叢集是彈性模式,您需要在集群資訊頁面的網路資訊地區,開啟啟用ENI網絡的開關。

操作步驟
串連目標AnalyticDB for MySQL叢集。詳細操作步驟,請參見串連叢集。
建立來源資料庫。詳細操作步驟,請參見建立資料庫。
本樣本中,AnalyticDB for MySQL叢集的源庫名為
adb_demo。建立源表並插入來源資料。
使用以下命令在源庫
adb_demo中建立一張名為courses的源表,並將該表中的資料匯出至自建MySQL目標庫test_adb的courses表中。CREATE TABLE courses ( id bigint AUTO_INCREMENT, name varchar NOT NULL, grade varchar DEFAULT '1st Grade', submission_date timestamp ) DISTRIBUTE BY HASH(id);使用以下命令往源表
courses中插入一行資料:INSERT INTO courses (name,submission_date) VALUES("Jams",NOW());建立外部映射表。
使用以下命令在源庫
adb_demo中建立一張名為courses_external_table的外部映射表。CREATE TABLE IF NOT EXISTS courses_external_table( id bigint NOT NULL, name varchar(32) NOT NULL, grade varchar(32) NOT NULL, submission_date timestamp NOT NULL, PRIMARY KEY (id) ) ENGINE='mysql' TABLE_PROPERTIES='{ "url":"jdbc:mysql://mysql-vpc-address:3306/test_adb", "tablename":"courses", "username":"mysql-user-name", "password":"mysql-user-password", "charset":"utf8" }';參數
說明
ENGINE=’mysql’外部表格的儲存引擎說明,本文使用的是MySQL。
TABLE_PROPERTIESAnalyticDB for MySQL訪問自建MySQL資料庫的訪問方式。
urlECS執行個體的主私網IP(即VPC地址)和目標庫名(本文樣本中為
test_adb)。查看步驟如下:登入ECS管理主控台並找到目標執行個體。
在執行個體詳情頁簽的網路資訊地區,查看主私網IP。
格式:
"jdbc:mysql://mysql-vpc-address:3306/ecs-database-name"。樣本:
jdbc:mysql://192.168.128.***:3306/test_adb。tablenameECS自建MySQL中目標表名,本文樣本中為
courses。username需要訪問ECS自建MySQL目標庫的帳號。
password以上帳號對應的密碼。
charsetMySQL字元集,取值說明:
gbk
utf8(預設值)
utf8mb4
將源AnalyticDB for MySQL叢集中的資料匯出至目標自建MySQL中。
文法如下:
REPLACE INTO courses_external_table SELECT * FROM courses;
後續步驟
您可以登入自建MySQL的目標test_adb庫中,執行如下命令查看並驗證源表資料是否成功匯入至目標courses表中:
SELECT * FROM courses LIMIT 100;