您可以將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');操作步驟
企業版、基礎版及湖倉版
進入SQL開發編輯器。
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,然後單擊目的地組群ID。
在左側導覽列,單擊。
引擎選擇XIHE,資源群組選擇Interactive型資源群組。
執行以下語句,建立外部資料庫。樣本如下:
CREATE EXTERNAL DATABASE adb_external_db;執行以下語句,建立外表。樣本如下:
說明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" }';查詢資料。
外表建立成功後,您可以在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 | +----------+-------+-------+------------+---------------------+執行以下語句,建立目標資料庫。
CREATE DATABASE adb_demo;執行以下語句,在目標資料庫
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);執行以下語句,將RDS for MySQL執行個體中的資料匯入至目標AnalyticDB for MySQL叢集中。
INSERT INTO mysql_import_test SELECT * FROM adb_external_db.goods;執行以下語句,查詢AnalyticDB for MySQL表
mysql_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 | +----------+-------+-------+------------+---------------------+
數倉版
串連目標AnalyticDB for MySQL叢集。詳細操作步驟,請參見串連叢集。
建立目標資料庫。詳細操作步驟,請參見建立資料庫。
本樣本中,AnalyticDB for MySQL叢集的目標庫名為
adb_demo。建立外表。
使用以下命令在目標庫
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_PROPERTIESAnalyticDB for MySQL訪問RDS for MySQL資料的訪問方式。
urlRDS 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。tablenameRDS for MySQL中源表名,本文樣本中為
goods。usernameRDS for MySQL資料庫帳號。
passwordRDS for MySQL資料庫帳號的密碼。
charsetMySQL字元集,取值說明:
gbk
utf8(預設值)
utf8mb4
建立目標表。
使用以下命令在目標資料庫
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);將源RDS MySQL執行個體中的資料匯入至目標AnalyticDB for MySQL叢集中。
REPLACE INTO mysql_import_test SELECT * FROM goods_external_table;匯入完成後,您可以登入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 | +----------+-------+-------+------------+---------------------+