文档

AnalyticDB MySQL 2.0数据导入

更新时间:

由于数仓版(3.0)AnalyticDB for MySQL 2.0的架构不同,因此AnalyticDB for MySQL 2.0不能升级到数仓版(3.0)。您需要迁移数据和应用到数仓版(3.0)。本文介绍数据和应用的迁移方法。

背景信息

AnalyticDB for MySQL 2.0随后会下线,不再做功能迭代,以维护为主。

数仓版(3.0)具有以下优势:

  • 版本完全基于ECS部署,采用云原生架构,集群更加弹性、轻量级和灵活。

  • 高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,通过标准SQL和常用BI工具、以及ETL工具平台即可轻松使用。

  • 在计算引擎和优化器上做了大量的改进和优化,性能更高。

  • 完全部署在阿里云数据库管控平台上,更加稳定、安全。

数据迁移场景

  • MaxCompute中存在原始数据,可以通过外表将MaxCompute中的历史数据导入到数仓版(3.0)中。具体操作,请参见通过外表导入至数仓版

  • MaxCompute中已经没有原始数据,原始数据只存在于AnalyticDB for MySQL 2.0集群的数据库中,可以使用两种数据迁移方式将AnalyticDB for MySQL 2.0集群中的数据导入到数仓版(3.0)。具体操作,请参见数据迁移

准备工作

  • 了解AnalyticDB for MySQL 2.0和数仓版(3.0)的产品架构、功能特征和使用方法的相同之处和不同之处。数仓版(3.0)的产品介绍,请参见云原生数据仓库AnalyticDB MySQL版产品简介

  • 根据AnalyticDB for MySQL 2.0集群已分配的资源,按照CPU数、内存、磁盘空间等维度的最短板向下或者向上一档选择对应的资源规格和数量,创建数仓版(3.0)集群。具体操作,请参见创建集群

  • 数仓版(3.0)集群中创建数据库和账号。具体操作,请参见创建数据库创建数据库账号

数据迁移

方式一:使用AnalyticDB for MySQL 2.0的工具迁移数据

重要
  • 如果AnalyticDB for MySQL 2.0中使用了多值列类型,多值列的数据未在MaxCompute中,那么这些多值列的数据无法迁移。

  • 如果业务存在实时写入流量,则需要在同步数据之前启动业务双写(即同时写入AnalyticDB for MySQL 2.0和数仓版(3.0)),以保证不会丢失数据同步期间产生的增量数据。

  1. 通过MySQL客户端连接AnalyticDB for MySQL 2.0集群。

    mysql -h host -P port -u username -p password -D dbname;

    参数

    说明

    host

    AnalyticDB for MySQL 2.0集群的公网IP地址。

    port

    AnalyticDB for MySQL 2.0集群的端口号。

    username

    AnalyticDB for MySQL 2.0集群的账号(AccessKey ID)。

    password

    AnalyticDB for MySQL 2.0集群的账号密码(AccessKey Secret)。

    dbname

    AnalyticDB for MySQL 2.0集群的数据库名称。

  2. 执行以下命令,查询外部数据库目录。

    SHOW CATALOGS;
  3. 执行以下命令,创建数仓版(3.0)的外部数据目录(External Catalog)。

    CREATE EXTERNAL CATALOG catalog_name
    properties(
     'connector.name'='mysql'
     'connection-url'='jdbc:mysql://mapping_ip:mapping_port/database_name'
     'connection-user'='$user'
     'connection-password'='$password'
    );

    如果AnalyticDB for MySQL 2.0集群的Meta表存有导入数据到MaxCompute的记录,可以将MaxCompute数据导入到数仓版(3.0)的外部数据目录。执行以下命令创建部数据目录:

    CREATE EXTERNAL CATALOG catalog_name
    properties(
     'connector.name' = 'mysql'
     'connection-url' = 'jdbc:mysql://mapping_ip:mapping_port/database_name'
     'connection-user' = '$user'
     'connection-password' = '$password'
     'odps-access-id' = '$access_id'
     'odps-access-key' = '$access_key'
    );

    参数

    说明

    connector.name

    创建数仓版(3.0)集群的外部数据目录,固定取值为MySQL。

    connection-url

    mapping_ip:mapping_port为反向代理平台的IP和端口号,请联系AnalyticDB for MySQL官方支持获取。database_name数仓版(3.0)集群的数据库名称。

    connection-user

    数仓版(3.0)集群数据库的账号。

    connection-password

    数仓版(3.0)集群数据库账号对应的密码。

    odps-access-id

    阿里云账号或者具备MaxCompute访问权限的RAM用户的AccessKey ID。

    如何获取AccessKey ID和AccessKey Secret,请参见账号与权限

    说明

    如果MaxCompute中已经没有AnalyticDB MySQL 2.0集群的原始数据,无需配置此参数。

    odps-access-key

    阿里云账号或者具备MaxCompute访问权限的RAM用户的AccessKey Secret。

    如何获取AccessKey ID和AccessKey Secret,请参见账号与权限

    说明

    如果MaxCompute中已经没有AnalyticDB MySQL 2.0集群的原始数据,无需配置此参数。

  4. 同步数据。

    • 同步整个库。数据同步到数仓版(3.0)外部数据目录定义中的数据库。

      data-sync database database_name to catalog_name [by pangu];

      参数

      说明

      database_name

      AnalyticDB for MySQL 2.0集群的数据库名称。

      catalog_name

      数仓版(3.0)外部数据目录的名称。

      by pangu

      对于MaxCompute中已经没有原始数据的场景,从AnalyticDB for MySQL 2.0本地同步数据, 需要在命令最后指定by pangu

      说明

      如果不指定by pangu,且在第二步未定义odps-access-idodps-access-key参数,数据同步会报错。

    • 同步单个表结构和数据。

      data-sync table table_name to catalog_name [by pangu];

      参数

      说明

      table_name

      AnalyticDB for MySQL 2.0集群的表名称。

      catalog_name

      数仓版(3.0)外部数据目录的名称。

      by pangu

      对于MaxCompute中已经没有原始数据的场景,从AnalyticDB for MySQL 2.0本地同步数据, 需要在命令最后指定by pangu

      说明

      如果不指定by pangu,且在第二步未定义odps-access-idodps-access-key参数,数据同步会报错。

    • 同步单个表的某个二级分区数据。

      data-sync table table_name to catalog_name on partition;

      参数

      说明

      table_name

      AnalyticDB for MySQL 2.0集群的表名称。

      catalog_name

      数仓版(3.0)外部数据目录的名称。

      partition

      AnalyticDB for MySQL 2.0集群中表的二级分区名称。

      例如AnalyticDB for MySQL 2.0集群中表的二级分区定义为PARTITION BY VALUE(202207)partition填写202207即可。

    • 按查询条件查询出单个表的部分数据同步到外部数据目录中。

      data-sync tabletable_name to catalog_name 
        options(mode=replace)
        where column_name < $value1 and column_name > $value2;

      参数

      说明

      table_name

      AnalyticDB for MySQL 2.0集群的表名称。

      catalog_name

      数仓版(3.0)外部数据目录的名称。

      mode=replace

      指定数据写入方式,取值:

      • replace:推荐值,数据写入时会覆盖表中原有的数据。

      • insert:默认值,当主键重复时会自动忽略当前写入数据,不做更新。

        说明

        写入方式为insert时,会出现FLOAT类型数据错误的问题。

      column_name

      AnalyticDB for MySQL 2.0集群中表的列名。

    • 同步整个库的元数据(Meta)。

      meta-sync database database_name to catalog_name;

      参数

      说明

      database_name

      AnalyticDB for MySQL 2.0集群的数据库名称。

      catalog_name

      数仓版(3.0)外部数据目录的名称。

    • 同步单个表的元数据(Meta)。

      meta-sync table table_name to catalog_name;

      参数

      说明

      table_name

      AnalyticDB for MySQL 2.0集群的数据库名称。

      catalog_name

      数仓版(3.0)外部数据目录的名称。

  5. 查看数据同步进度。

    • 查看所有任务进度。

      show data-sync;
    • 查看执行成功的任务进度。

      show data-sync succeeded;
    • 查看正在执行的任务进度。

      show data-sync running;
    • 查看执行失败的任务进度。

      show data-sync failed;
    • 查看单个表的任务进度。

      show data-sync table_name;

方式二:通过外表方式进行数据迁移

具体操作,请参见通过外表导入RDS MySQL数据至数仓版

SQL回归测试

由于数仓版(3.0)全面兼容MySQL,摒弃了AnalyticDB for MySQL 2.0的部分函数,如果AnalyticDB for MySQL 2.0的SQL语句使用了这些函数,则数仓版(3.0)无法兼容这些SQL语句。因此,需要把AnalyticDB for MySQL 2.0的SQL在数仓版(3.0)进行全部回归测试,以防止正式迁移后部分函数报错。

由于SQL回归测试后期属于内部操作,无需用户执行,若用户有SQL回归测试的需求,请联系AnalyticDB for MySQL官方支持或在AnalyticDB MySQL2.0迁3.0用户服务群(钉钉群号:44914638)中反馈问题。

测试验证

需要根据业务要求在数仓版(3.0)进行功能验证和性能验证。

应用迁移

当数据迁移完成,且SQL回归测试通过后,可以将应用迁移到数仓版(3.0)

在应用中替换以下信息,完成应用迁移。

  • AnalyticDB for MySQL 2.0集群的连接地址更换为数仓版(3.0)集群的连接地址。

    通过控制台集群信息页面中的网络信息区域获取连接地址。

  • AnalyticDB for MySQL 2.0集群的数据库账号(AccessKey ID)和密码(AccessKey Secrect)更换为数仓版(3.0)集群的数据库账号和密码。查看数仓版(3.0)数据库账号和密码的操作,请参见创建AccessKey