迁移ECS自建MySQL数据库至MaxCompute

本文为您介绍如何使用独享数据集成资源,将您在ECS上自建的MySQL数据库中的数据,迁移到MaxCompute。

前提条件

  • 已拥有至少一个绑定专有网络VPC的ECS(请勿使用经典网络),并在ECS上安装好MySQL数据库,数据库中已创建好用户和测试数据。本文中ECS自建MySQL的测试数据创建语句如下。

    CREATE TABLE IF NOT EXISTS good_sale(
       create_time timestamp,
       category varchar(20),
       brand varchar(20),
       buyer_id varchar(20),
       trans_num varchar(20),
       trans_amount DOUBLE,
       click_cnt varchar(20)
       );
    insert into good_sale values('2018-08-21','coat','brandA','lilei',3,500.6,7),
    ('2018-08-22','food','brandB','lilei',1,303,8),
    ('2018-08-22','coat','brandC','hanmeimei',2,510,2),
    ('2018-08-22','bath','brandA','hanmeimei',1,442.5,1),
    ('2018-08-22','food','brandD','hanmeimei',2,234,3),
    ('2018-08-23','coat','brandB','jimmy',9,2000,7),
    ('2018-08-23','food','brandA','jimmy',5,45.1,5),
    ('2018-08-23','coat','brandE','jimmy',5,100.2,4),
    ('2018-08-24','food','brandG','peiqi',10,5560,7),
    ('2018-08-24','bath','brandF','peiqi',1,445.6,2),
    ('2018-08-24','coat','brandA','ray',3,777,3),
    ('2018-08-24','bath','brandG','ray',3,122,3),
    ('2018-08-24','coat','brandC','ray',1,62,7) ;
  • 请记录好您的ECS的私有IP专有网络虚拟交换机信息。ECS

  • ECS上的安全组已放通MySQL数据库所使用的端口(默认为3306),详情请参见添加安全组规则,请记录好您的安全组名称。

  • 已成功创建DataWorks工作空间。本文使用DataWorks简单模式工作空间,计算引擎为MaxCompute。请保证您的ECS与DataWorks工作空间处于同一个地域,创建方法请参见创建工作空间

  • 已完成独享数据集成资源的购买,并且绑定了ECS所在的专有网络VPC。请注意独享资源组必须与ECS同一可用区,详情请参见新增和使用独享数据集成资源组。完成绑定后,您可以在资源组列表查看到您的独享资源组。

  • 网络设置 > 专有网络绑定处查看专有网络交换机安全组信息是否和ECS一致。网络绑定

  • 已新增MaxCompute数据源。详情请参见创建MaxCompute数据源

背景信息

独享资源可以保障您的数据快速、稳定地传输。您购买的独享数据集成资源和需要访问的数据源(即本文中的ECS自建MySQL数据库)必须在同地域同可用区,且和DataWorks工作空间同地域。

操作步骤

  1. 在DataWorks上创建MySQL数据源。

    1. 进入数据源页面。

      1. 登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的管理中心,在下拉框中选择对应工作空间后单击进入管理中心

      2. 进入工作空间管理中心页面后,单击左侧导航栏的数据源 > 数据源列表,进入数据源页面。

    2. 单击新增数据源

    3. 新增数据源对话框,单击MySQL

    4. 创建MySQL数据源对话框中,配置各项参数,详情请参见配置MySQL数据源

      本文以连接串模式为例,在连接地址处输入您刚刚记录的ECS私有地址和MySQL的默认端口号3306。连接串模式

      说明

      当前VPC环境下的自建MySQL数据源暂不支持测试连通性,因此连通性测试失败是正常现象。

    5. 单击相应资源组后的测试连通性

      数据同步时,可使用独享数据集成资源组。任务每次运行只能使用一个资源组,如有多个可选择的资源组,需单独测试所选资源组的连通性,以保证同步任务使用的资源组能够与数据源连通,否则将无法正常执行数据同步任务。详情请参见网络连通方案

    6. 测试连通性通过后,单击完成

  2. 创建MaxCompute表。

    您需要通过DataWorks创建一个表,用于接收来自MySQL的测试数据。

    1. 单击左上角的图标图标,选择全部产品 > 数据开发与运维 > DataStudio(数据开发)

    2. 新建一个业务流程,详情请参见创建周期业务流程

    3. 右键单击新建的业务流程,选择新建表 > MaxCompute >

    4. 输入您的MaxCompute表名称,本例中使用和MySQL数据库表一样的名称good_sale。单击DDL后,输入您的建表语句并生成表结构

      本例中使用的建表语句如下,请注意数据类型的转换。

      CREATE TABLE IF NOT EXISTS good_sale(
         create_time string,
         category STRING,
         brand STRING,
         buyer_id STRING,
         trans_num BIGINT,
         trans_amount DOUBLE,
         click_cnt BIGINT
         );
    5. 输入表的中文名后,单击提交到生产环境,完成MaxCompute表good_sale的创建。

      15

  3. 配置数据集成任务。

    1. 右键单击业务流程,选择新建节点 > 数据集成 > 离线同步,创建一个数据集成任务。

    2. 选择您的数据来源为您刚添加的MySQL数据源,数据去向选择已添加的MaxCompute数据源,单击转换脚本切换数据集成任务为脚本模式。

      此时,如果产生报错或您无法选择数据来源的,都属于正常现象,直接转换为脚本模式即可。32

    3. 单击页面右侧的数据集成资源组配置,选中已购买的独享资源组。

      如果未切换任务资源组为数据集成独享资源,后续您的任务将无法成功运行。

    4. 填写数据集成任务脚本内容如下。

      {
          "type": "job",
          "steps": [
              {
                  "stepType": "mysql",
                  "parameter": {
                      "column": [//源列名
                          "create_time",
                          "category",
                          "brand",
                          "buyer_id",
                          "trans_num",
                          "trans_amount",
                          "click_cnt"
                      ],
                      "connection": [
                          {
                              "datasource": "shuai",//源数据源
                              "table": [
                                  "good_sale"//源数据库表名,此处必须为方括号数组格式。
                              ]
                          }
                      ],
                      "where": "",
                      "splitPk": "",
                      "encoding": "UTF-8"
                  },
                  "name": "Reader",
                  "category": "reader"
              },
              {
                  "stepType": "odps",
                  "parameter": {
                      "partition": "",
                      "truncate": true,
                      "datasource": "odps_source",//目标MaxCompute数据源名称
                      "column": [//目标列名
                          "create_time",
                          "category",
                          "brand",
                          "buyer_id",
                          "trans_num",
                          "trans_amount",
                          "click_cnt"
                      ],
                      "emptyAsNull": false,
                      "table": "good_sale"//目标表名
                  },
                  "name": "Writer",
                  "category": "writer"
              }
          ],
          "version": "2.0",
          "order": {
              "hops": [
                  {
                      "from": "Reader",
                      "to": "Writer"
                  }
              ]
          },
          "setting": {
              "errorLimit": {
                  "record": "0"
              },
              "speed": {
                  "throttle": false,
                  "concurrent": 2
              }
          }
      }
    5. 单击运行,您可以在下方的运行日志查看数据是否已传输到MaxCompute。

      123

执行结果

您可以新建一个ODPS SQL类型的节点,用于查询当前MaxCompute表中的数据。

输入您的查询语句select * from good_sale ;,单击运行,即可看到当前已传入MaxCompute表中的数据。222