AnalyticDB for MySQL 2.0数据导入
由于企业版与AnalyticDB for MySQL 2.0的架构不同,因此AnalyticDB for MySQL 2.0不能升级到企业版。您需要迁移数据和应用到企业版。本文介绍数据和应用的迁移方法。
背景信息
AnalyticDB for MySQL 2.0随后会下线,不再做功能迭代,以维护为主。
企业版具有以下优势:
版本完全基于ECS部署,采用云原生架构,集群更加弹性、轻量级和灵活。
高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,通过标准SQL和常用BI工具、以及ETL工具平台即可轻松使用。
在计算引擎和优化器上做了大量的改进和优化,性能更高。
完全部署在阿里云数据库管控平台上,更加稳定、安全。
数据迁移场景
MaxCompute中存在原始数据,可以通过外表将MaxCompute中的历史数据导入到企业版中。具体操作,请参见通过外表导入MaxCompute数据。
MaxCompute中已经没有原始数据,原始数据只存在于AnalyticDB for MySQL 2.0集群的数据库中,可以使用两种数据迁移方式将AnalyticDB for MySQL 2.0集群中的数据导入到企业版。具体操作,请参见数据迁移。
准备工作
了解AnalyticDB for MySQL 2.0和企业版的产品架构、功能特征和使用方法的相同之处和不同之处。企业版的产品介绍,请参见什么是云原生数据仓库AnalyticDB MySQL版。
根据AnalyticDB for MySQL 2.0集群已分配的资源,按照CPU数、内存、磁盘空间等维度的最短板向下或者向上一档选择对应的资源规格和数量,创建企业版集群。具体操作,请参见创建集群。
在企业版集群中创建数据库账号和数据库。具体操作,请参见创建数据库账号和CREATE DATABASE。
数据迁移
方式一:通过外表方式进行数据迁移
将AnalyticDB for MySQL 2.0的数据导出至OSS。
/*+ dump-col-del=[,], dump-row-del=[;], dump-oss-accesskey-id=ACCESS_KEY_ID, dump-oss-accesskey-secret=ACCESS_KEY_SECRET, engine=MPP, dump-header=[DUMP DATA OVERWRITE INTO 'oss://<endpoint>/testBucketName/adb/customer.csv'] */ SELECT * FROM table_name;重要建议将列分隔符(
dump-col-del)和行分隔符(dump-row-del),设置为表数据中未出现过的字符串,例如“^@&”等。建议AnalyticDB for MySQL 2.0集群与OSS位于同一地域。
语法详情,请参见8.12.DUMP TO OSS(2.0版)章节。
在企业版中创建外表。
CREATE EXTERNAL TABLE adb_demo( id int, name string, age int ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '<COL_SPLIT>' STORED AS `TEXTFILE` LOCATION 'oss://<endpoint>/testBucketName/adb/customer.csv' TBLPROPERTIES ( 'record.delimiter' = '<ROW_SPLIT>', "serialization.lib"="org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe" );参数说明:
参数
说明
COL_SPLIT
步骤1中导出2.0数据时设置的列分隔符。
STORED AS
指定文件格式。
如果文件是
.txt或.csv格式,请配置为STORED AS TEXTFILE。LOCATION
步骤1中导出的2.0数据所在的OSS路径。格式为
oss://<endpoint>/testBucketName/adb/customer.csv。endpoint:OSS内网的Endpoint。testBucketName/adb/customer.csv:数据所在的实际OSS路径。
record.delimiter
步骤1中导出2.0数据时设置的行分隔符。
serialization.lib
指定列分隔符,可支持多个字符。默认情况下,列分隔符仅支持定义一个字符,若您在步骤1中导出2.0数据时,列分隔符设置为两个或多个字符时,该参数必填。
ROW_SPLIT
步骤1中导出2.0数据时设置的行分隔符。
在企业版中创建内表。
CREATE TABLE IF NOT EXISTS adb_import_test ( id int, name string, age int INDEX (id) ) DISTRIBUTED BY HASH (KEY) OPTIONS (UPDATETYPE='realtime') COMMENT '';重要在AnalyticDB for MySQL 2.0中,PRIMARY KEY可能有重复键,而3.0实例的PRIMARY KEY是唯一键,因此建议将2.0表DDL中的PRIMARY KEY改为INDEX,避免数据重复。
在企业版中,将外表
adb_demo数据导入至内表adb_import_test。INSERT INTO adb_import_test SELECT * FROM adb_demo;
方案二:使用AnalyticDB for MySQL 2.0的工具迁移数据
部分较低内核版本的集群,使用此方式迁移数据可能出现报错,建议优先使用方式一进行数据迁移。
如果AnalyticDB for MySQL 2.0中使用了多值列类型,多值列的数据未在MaxCompute中,那么这些多值列的数据无法迁移。
如果业务存在实时写入流量,则需要在同步数据之前启动业务双写(即同时写入AnalyticDB for MySQL 2.0和企业版),以保证不会丢失数据同步期间产生的增量数据。
SQL回归测试
由于企业版全面兼容MySQL,摒弃了AnalyticDB for MySQL 2.0的部分函数,如果AnalyticDB for MySQL 2.0的SQL语句使用了这些函数,则企业版无法兼容这些SQL语句。因此,需要把AnalyticDB for MySQL 2.0的SQL在企业版进行全部回归测试,以防止正式迁移后部分函数报错。
由于SQL回归测试后期属于内部操作,无需用户执行,若用户有SQL回归测试的需求,请联系AnalyticDB for MySQL官方支持。
测试验证
需要根据业务要求在企业版进行功能验证和性能验证。
应用迁移
当数据迁移完成,且SQL回归测试通过后,可以将应用迁移到企业版。
在应用中替换以下信息,完成应用迁移。
将AnalyticDB for MySQL 2.0集群的连接地址更换为企业版集群的连接地址。
通过控制台集群信息页面中的网络信息区域获取连接地址。
将AnalyticDB for MySQL 2.0集群的数据库账号(AccessKey ID)和密码(AccessKey Secrect)更换为企业版集群的数据库账号和密码。查看企业版数据库账号和密码的操作,请参见创建AccessKey。
常见问题
如何将AnalyticDB for MySQL 2.0的数据导出到对象存储(OSS)
请参见分析型数据库MySQL版2.0的8.12. DUMP TO OSS(2.0版)章节。