AnalyticDB MySQL版支持通过外表导入导出数据。本文介绍如何通过AnalyticDB MySQL的外表将ECS自建MySQL数据库的数据导入至AnalyticDB MySQL数仓版(3.0)

前提条件

  • 已创建与AnalyticDB MySQL集群同地域的ECS实例。
  • 已在ECS实例中安装自建MySQL。
  • 已在ECS实例的安全组中对自建MySQL的端口3306入方向进行授权。详情请参见添加安全组规则
  • 需在ECS自建MySQL上完成创建数据库并准备好相关测试数据等操作。
    本文示例中,测试所用的ECS自建MySQL源库名为test_adb,并在该库中创建了一张名为goods的源表,建表语句如下:
    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)
    );
  • 如果您的AnalyticDB MySQL集群是弹性模式,您需要在集群信息页面的网络信息区域,打开启用ENI网络的开关。启用ENI网络

操作步骤

  1. 连接目标AnalyticDB MySQL集群。详细操作步骤,请参见连接集群
  2. 创建目标数据库。详细操作步骤,请参见创建数据库

    本示例中,AnalyticDB 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_PROPERTIESAnalyticDB MySQL访问自建MySQL数据库的访问方式。
    urlECS实例的主私网IP(即VPC地址)和源库名(本文示例中为test_adb)。查看步骤如下:
    1. 登录ECS管理控制台并找到目标实例。
    2. 实例详情页签的网络信息区域,查看主私网IP

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

    示例:jdbc:mysql://192.168.128.***:3306/test_adb

    tablenameECS自建MySQL中源表名,本文示例中为goods
    username需要访问ECS自建MySQL源库的账号。
    password以上账号对应的密码。
    charsetMySQL字符集,取值说明:
    • gbk
    • utf8(默认值)
    • utf8mb4
  4. 创建目标表。

    使用以下命令在目标数据库adb_demo中创建一张名为mysql_import_test的目标表,用于存储从ECS自建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. 将源ECS自建MySQL实例中的数据导入至目标AnalyticDB MySQL集群中。
    REPLACE INTO mysql_import_test
    SELECT * FROM goods_external_table;

后续步骤

导入完成后,您可以登录AnalyticDB MySQL的目标库adb_demo中,执行如下命令查看并验证源表数据是否成功导入至目标mysql_import_test表中:
SELECT * FROM mysql_import_test LIMIT 100;