本文介绍如何在云原生数据仓库AnalyticDB MySQL版湖仓版(3.0)中读写RDS MySQL数据。

前提条件

  • 已创建RDS MySQL实例。详细操作步骤,请参见创建RDS MySQL实例
  • 已在RDS MySQL实例所在的同一VPC中创建AnalyticDB MySQL湖仓版(3.0)集群。详细操作步骤,请参见创建湖仓版(3.0)集群
  • 已在AnalyticDB MySQL控制台集群信息页面的网络信息栏启用ENI网络开关。
  • 已将AnalyticDB MySQL的VPC网段加入RDS MySQL实例的白名单中。详细操作步骤,请参见设置RDS的IP白名单

示例数据说明

本文示例的RDS MySQL数据库名为test_adb,并在该库中创建了一张名为person的表,示例如下:
CREATE TABLE IF NOT EXISTS test_adb.person(
id int,
name varchar(1023),
age int
);
person表中插入数据,示例如下:
INSERT INTO test_adb.person values
(1, 'james', 10),
(2, 'bond', 20),
(3, 'jack', 30),
(4, 'lucy', 40);

操作步骤

  1. 进入SQL开发编辑器。
    1. 登录云原生数据仓库AnalyticDB MySQL控制台
    2. 在页面左上角,选择集群所在地域。
    3. 在左侧导航栏,单击集群列表
    4. 湖仓版(3.0)页签下,单击目标集群ID
    5. 在左侧导航栏,单击作业编辑器 > SQL开发
  2. 引擎选择Xihe,资源组选择Interactive型资源组。
  3. 执行以下语句,创建外部数据库。示例如下:
    CREATE EXTERNAL DATABASE adb_external_db;
  4. 执行以下语句,创建外表。示例如下:
    说明 AnalyticDB MySQL外表和RDS MySQL中表的列名称、数量、顺序、字段类型需要相同。
    CREATE EXTERNAL TABLE IF NOT EXISTS  adb_external_db.person (
        id int,
        name varchar(1023),
        age int
     )ENGINE = 'MYSQL' TABLE_PROPERTIES = '{
       "url":"jdbc:mysql://mysql-address:3306/test_adb",
       "tablename":"person",
       "username":"mysql-user-name",
       "password":"mysql-user-password",
       "charset":"utf8"
    }';
    参数说明
    ENGINE=’MySQL’外表的存储引擎。读写RDS MySQL数据时,取值为mysql。
    urlRDS MySQL实例的内网地址和数据库名(本文示例中为test_adb)。RDS MySQL外网地址信息的查看方法,请参见查看或修改内外网地址和端口

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

    示例:jdbc:mysql://rm-bp11720****.mysql.rds.aliyuncs.com:3306/test_adb

    tablenameRDS MySQL的表名称,本文示例中为person
    usernameRDS MySQL数据库的账号。
    passwordRDS MySQL数据库账号的密码。
    charsetMySQL字符集,取值说明:
    • gbk
    • utf8(默认值)
    • utf8mb4
  5. 查询数据。
    外表创建成功后,您可以在AnalyticDB MySQL中通过SELECT查询RDS MySQL中person表的数据。
    SELECT * FROM adb_external_db.person;
    返回结果如下:
    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    3 | jack  |   30 |
    |    4 | lucy  |   40 |
    +------+-------+------+
    4 rows in set (0.35 sec)
  6. 将数据写入RDS MySQL。
    INSERT INTO adb_external_db.person SELECT 5, 'lily', 20;
    返回结果如下:
    +------+
    | rows |
    +------+
    |   1  |
    +------+
    1 row in set (0.57 sec)