由于数仓版(3.0)与AnalyticDB MySQL 2.0的架构不同,因此AnalyticDB MySQL 2.0不能升级到数仓版(3.0)。您需要迁移数据和应用到数仓版(3.0)。本文介绍数据和应用的迁移方法。
背景信息
AnalyticDB MySQL 2.0随后会下线,不再做功能迭代,以维护为主。
数仓版(3.0)具有以下优势:
- 版本完全基于ECS部署,采用云原生架构,集群更加弹性、轻量级和灵活。
- 高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,通过标准SQL和常用BI工具、以及ETL工具平台即可轻松使用。
- 在计算引擎和优化器上做了大量的改进和优化,性能更高。
- 完全部署在阿里云数据库管控平台上,更加稳定、安全。
数据迁移场景
- MaxCompute中存在原始数据,可以通过外表将MaxCompute中的历史数据导入到数仓版(3.0)中。具体操作,请参见通过外表导入MaxCompute数据至数仓版。
- MaxCompute中已经没有原始数据,原始数据只存在于AnalyticDB MySQL 2.0集群的数据库中,可以使用两种数据迁移方式将AnalyticDB MySQL 2.0集群中的数据导入到数仓版(3.0)。具体操作,请参见数据迁移。
准备工作
- 了解AnalyticDB MySQL 2.0和数仓版(3.0)的产品架构、功能特征和使用方法的相同之处和不同之处。数仓版(3.0)的产品介绍,请参见什么是云原生数据仓库AnalyticDB MySQL版。
- 根据AnalyticDB MySQL 2.0集群已分配的资源,按照CPU数、内存、磁盘空间等维度的最短板向下或者向上一档选择对应的资源规格和数量,创建数仓版(3.0)集群。具体操作,请参见创建集群。
- 在数仓版(3.0)集群中创建数据库和账号。具体操作,请参见创建数据库和创建数据库账号。
数据迁移
方式一:使用AnalyticDB MySQL 2.0的工具迁移数据
重要
- 如果AnalyticDB MySQL 2.0中使用了多值列类型,多值列的数据未在MaxCompute中,那么这些多值列的数据无法迁移。
- 如果业务存在实时写入流量,则需要在同步数据之前启动业务双写(即同时写入AnalyticDB MySQL 2.0和数仓版(3.0)),以保证不会丢失数据同步期间产生的增量数据。
- 通过MySQL客户端连接AnalyticDB MySQL 2.0集群。
mysql -h host -P port -u username -p password -D dbname;
参数 说明 host
AnalyticDB MySQL 2.0集群的公网IP地址。 port
AnalyticDB MySQL 2.0集群的端口号。 username
AnalyticDB MySQL 2.0集群的账号(AccessKey ID)。 password
AnalyticDB MySQL 2.0集群的账号密码(AccessKey Secret)。 dbname
AnalyticDB MySQL 2.0集群的数据库名称。 - 执行以下命令,查询外部数据库目录。
SHOW CATALOGS;
- 执行以下命令,创建数仓版(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 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 MySQL官方支持获取。database_name
数仓版(3.0)集群的数据库名称。connection-user
数仓版(3.0)集群数据库的账号。 connection-password
数仓版(3.0)集群数据库账号对应的密码。 odps-access-id
阿里云账号或者具备MaxCompute访问权限的RAM用户的AccessKey ID。 如何获取AccessKey ID和AccessKey Secret,请参见获取AccessKey信息。
说明 如果MaxCompute中已经没有 AnalyticDB MySQL 2.0集群的原始数据,无需配置此参数。odps-access-key
阿里云账号或者具备MaxCompute访问权限的RAM用户的AccessKey Secret。 如何获取AccessKey ID和AccessKey Secret,请参见获取AccessKey信息。
说明 如果MaxCompute中已经没有 AnalyticDB MySQL 2.0集群的原始数据,无需配置此参数。 - 同步数据。
- 同步整个库。数据同步到数仓版(3.0)外部数据目录定义中的数据库。
data-sync database database_name to catalog_name [by pangu];
参数 说明 database_name
AnalyticDB MySQL 2.0集群的数据库名称。 catalog_name
数仓版(3.0)外部数据目录的名称。 by pangu
对于MaxCompute中已经没有原始数据的场景,从AnalyticDB MySQL 2.0本地同步数据, 需要在命令最后指定 by pangu
。说明 如果不指定by pangu
,且在第二步未定义odps-access-id
和odps-access-key
参数,数据同步会报错。 - 同步单个表结构和数据。
data-sync table table_name to catalog_name [by pangu];
参数 说明 table_name
AnalyticDB MySQL 2.0集群的表名称。 catalog_name
数仓版(3.0)外部数据目录的名称。 by pangu
对于MaxCompute中已经没有原始数据的场景,从AnalyticDB MySQL 2.0本地同步数据, 需要在命令最后指定 by pangu
。说明 如果不指定by pangu
,且在第二步未定义odps-access-id
和odps-access-key
参数,数据同步会报错。 - 同步单个表的某个二级分区数据。
data-sync table table_name to catalog_name on partition;
参数 说明 table_name
AnalyticDB MySQL2.0集群的表名称。 catalog_name
数仓版(3.0)外部数据目录的名称。 partition
AnalyticDB MySQL 2.0集群中表的二级分区名称。 例如AnalyticDB MySQL 2.0集群中表的二级分区定义为
PARTITION BY VALUE(202207)
,partition
填写202207即可。 - 按查询条件查询出单个表的部分数据同步到外部数据目录中。
data-sync table table_name to catalog_name options(mode=replace) where column_name < $value1 and column_name > $value2;
参数 说明 table_name
AnalyticDB MySQL 2.0集群的表名称。 catalog_name
数仓版(3.0)外部数据目录的名称。 mode=replace
指定数据写入方式,取值: - replace:推荐值,数据写入时会覆盖表中原有的数据。
- insert:默认值,当主键重复时会自动忽略当前写入数据,不做更新。
说明 写入方式为insert时,会出现FLOAT类型数据错误的问题。
column_name
AnalyticDB MySQL 2.0集群中表的列名。 - 同步整个库的元数据(Meta)。
meta-sync database database_name to catalog_name;
参数 说明 database_name
AnalyticDB MySQL 2.0集群的数据库名称。 catalog_name
数仓版(3.0)外部数据目录的名称。 - 同步单个表的元数据(Meta)。
meta-sync table table_name to catalog_name;
参数 说明 table_name
AnalyticDB MySQL 2.0集群的数据库名称。 catalog_name
数仓版(3.0)外部数据目录的名称。
- 同步整个库。数据同步到数仓版(3.0)外部数据目录定义中的数据库。
- 查看数据同步进度。
- 查看所有任务进度。
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 MySQL 2.0的部分函数,如果AnalyticDB MySQL 2.0的SQL语句使用了这些函数,则数仓版(3.0)无法兼容这些SQL语句。因此,需要把AnalyticDB MySQL 2.0的SQL在数仓版(3.0)进行全部回归测试,以防止正式迁移后部分函数报错。
由于SQL回归测试后期属于内部操作,无需用户执行,若用户有SQL回归测试的需求,请联系AnalyticDB MySQL官方支持或在AnalyticDB MySQL2.0迁3.0用户服务群(钉钉群号:44914638)中反馈问题。
测试验证
需要根据业务要求在数仓版(3.0)进行功能验证和性能验证。
应用迁移
当数据迁移完成,且SQL回归测试通过后,可以将应用迁移到数仓版(3.0)。
在应用中替换以下信息,完成应用迁移。
- 将AnalyticDB MySQL 2.0集群的连接地址更换为数仓版(3.0)集群的连接地址。
通过控制台集群信息页面中的网络信息区域获取连接地址。
- 将AnalyticDB MySQL 2.0集群的数据库账号(AccessKey ID)和密码(AccessKey Secrect)更换为数仓版(3.0)集群的数据库账号和密码。查看数仓版(3.0)数据库账号和密码的操作,请参见创建AccessKey。