使用CDM迁移AnalyticDB for MySQL至GaussDB(DWS)集群
本实践演示如何使用云数据迁移服务CDM将AnalyticDB for MySQL(后面简称ADB)数据迁移到GaussDB(DWS)。
云数据迁移(Cloud Data Migration,简称CDM),是一种高效、易用的批量数据迁移服务。了解更多请参见云数据迁移CDM。
本实践预计时长90分钟,实践用到的云服务包括虚拟私有云 VPC及子网、弹性公网EIP、云数据迁移 CDM和数据仓库服务 GaussDB(DWS),基本流程如下:
约束与限制
- 如果在CDM迁移过程中有DELETE、UPDATE操作,无法保证迁移后的数据一致,需要重新迁移。
- 整库迁移作业一次只能迁移一个数据库,如果迁移多个数据库需要配置多个迁移作业。
- 在目标端DWS需要创建待同步的数据库和schema。
- ADB的库层级对应的是DWS的schema层级。
- 需确保源ADB集群、目标GaussDB(DWS)集群与CDM网络互通。本例GaussDB(DWS)和CDM创建在同一个区域、同一个网络私有云和子网下。
- 迁移用户权限放通。
- 源端和目标端客户端安装完成。
- 在源端ADB集群配置“数据安全-白名单设置”,添加CDM集群的IP信息。
- 已准备表1所列的迁移工具:DSC、DataCheck。
- DataCheck运行环境满足以下要求:
- 服务器:Linux或Windows服务器,支持64位操作系统。
- JRE或JDK:系统已安装JRE 1.8。
- 网络环境:安装、运行DataCheck工具的服务器,需要与待连接的数据库的网络互通。
步骤一:元数据迁移
- 导出源语法。源语法是客户业务的实现逻辑,从ADB导出源语法,再修改为适用于GaussDB(DWS)的语法,可以减少建模的工作量,提升业务迁移的效率。
导出方法:在ADB控制台操作,登录数据库后,选择对应数据库,选择“导出 > 整库建表语句”,保存DDL_migration.sql即可。
由于源语法涉及业务范围的识别,需熟悉业务的DBA进行操作,建议源语法由客户DBA提供。
- 使用DSC工具对DDL语法进行转换。
- 解压迁移前准备获取到的DSC工具包。
- 将待转换的DDL语法文件放入DSC的input文件夹中。
图2 input目录
- 打开命令行工具,Windows环境下双击runDSC.bat。(Linux环境下运行runDSC.sh。)
- 执行以下命令进行语法转换。
1
runDSC.bat -S mysql
图3 DDL转换
- 可以在output文件夹下查看转换结果。
图4 DDL转换结果
- 连接GaussDB(DWS),执行以下SQL语句创建目标数据库,本例为migration。
1
CREATE DATABASE database_name WITH ENCODING 'UTF-8' DBCOMPATIBILITY 'mysql' TEMPLATE template0;
- ADB中的数据库的概念相当于GaussDB(DWS)的Schema的概念,因此目的端DWS需要在新创建的数据库中创建对应的Schema。
先切换到新创建的数据库,再执行以下SQL语句创建Schema。
1
CREATE SCHEMA schema_name;
- 在DWS的SQL编辑器窗口,选择已创建的数据库和Schema,单击“导入”,导入2转换完成的建表语句。
图5 导入DDL语句
- 导入完成后,单击“运行”,执行SQL语句完成建表。
- 查看表是否创建成功。
1
SELECT table_name FROM information_schema.tables WHERE table_schema = 'migration';
步骤二:表数据迁移
- 配置CDM的源端连接。
- 配置CDM的目标端连接。
- 参见同样方法,选择“作业管理 > 连接管理 > 新建连接”。
- 选择“数据仓库服务(DWS)”,单击“下一步”。
- 同理,填写DWS的数据库信息。
图8 DWS信息
- 单击“测试”,测试连通后,单击“保存”。
- 配置并启动表级迁移作业。
- 单击“表/文件迁移”标签。该标签下创建的作业为单表数据迁移。
- 填写源端和目标端信息。
图9 表级作业迁移
- 作业名称:用户自定义便于记忆、区分的任务名称。
- 源端作业配置
- 源连接名称:选择已创建MySQL源端连接。
- 使用SQL语句:否。
- 模式或表空间:待抽取数据的模式或表空间名称。
- 表名:要抽取的表名。
- 其他可选参数一般情况下保持默认即可。
- 目的端作业配置
- 目的连接名称:选择已创建的DWS目标端连接。
- 模式或表空间:选择待写入数据的DWS数据库。
- 自动创表:只有当源端和目的端都为关系数据库时,才有该参数。
- 表名:待写入数据的表名,可以手动输入一个不存在表名,CDM会在DWS中自动创建该表。
- 导入前清空数据:任务启动前,是否清除目的表中数据,用户可根据实际需要选择。
- 单击“下一步”,进行字段映射。
图10 表级迁移表字段映射
- 如果字段映射顺序不匹配,可通过拖拽字段调整。
- CDM的表达式已经预置常用字符串、日期、数值等类型的字段内容转换,详细请参见字段转换。
- 确认无误后单击“下一步”。
- 在任务配置页面,填写以下参数。
- 作业失败重试:如果作业执行失败,可选择是否自动重试,这里保持默认值“不重试”。
- 作业分组:选择作业所属的分组,默认分组为“DEFAULT”。在CDM“作业管理”界面,支持作业分组显示、按组批量启动作业、按分组导出作业等操作。
- 是否定时执行:如果需要配置作业定时自动执行,可打开此配置。这里保持默认值“否”。
- 抽取并发数:表示单并发抽取数据,默认为1,可以适当调大取值,建议不要超过4。
- 是否写入脏数据:表到表的迁移容易出现脏数据,建议配置脏数据归档。
图11 表级迁移任务配置
- 确认无误后,单击“保存并运行”。
迁移作业开始执行,可以在作业任务栏中查看运行状态,等待作业迁移成功。
图12 表级迁移成功
- 配置并启动库级迁移作业。
- 单击“整库迁移”页签,单击“新建作业”。
- 按照提示输入各项,左侧是源端信息,右侧为目标端信息。
- 作业名称:用户自定义便于记忆、区分的任务名称。
- 源端作业配置
- 源连接名称:选择已创建的MySQL源端连接。
- 使用SQL语句:否。
- 模式或表空间:待抽取数据的模式或表空间名称。
- 表名:要抽取的表名。
- 其他可选参数一般情况下保持默认即可。
- 目的端作业配置
- 目的连接名称:选择已创建的DWS目标端连接。
- 模式或表空间:选择待写入数据的DWS数据库。
- 自动创表:只有当源端和目的端都为关系数据库时,才有该参数。
- 导入前清空数据:任务启动前,是否清除目的表中数据,用户可根据实际需要选择。
图13 库级迁移作业配置
- 填写完毕后单击“下一步”。
- 勾选所有表或需迁移数据的表,单击中间右箭头转移到右侧,无误后单击“下一步”。
图14 选择迁移的表
- 填写作业配置参数。
- 同时执行的子作业个数:表示同时同步数据的表个数,默认为10,建议调到5以下。
- 抽取并发数:表示单并发抽取数据,默认为1,可以适当调大,建议不要超过4。
核对无误后单击“保存并运行”。
- 等待作业迁移完成。单击作业名称,可以看到各表的迁移完成情况。
图15 各表数据迁移情况
- 连接GaussDB(DWS),执行以下SQL查看数据是否迁移成功。
1 2 3 4
SELECT 'migration.users',count(1) FROM migration.users UNION ALL SELECT 'migration.products',count(1) FROM migration.products UNION ALL SELECT 'migration.orders',count(1) FROM migration.orders UNION ALL SELECT 'migration.employees',count(1) FROM migration.employees;
步骤三:数据一致性校验
迁移完成之后,可使用数据校验工具DataCheck校验源端、目标端的数据是否一致。
- 下载软件包后,解压DataCheck-*.zip包,进入DataCheck-*目录,即可使用。目录下各文件的使用说明参见表2。
- 配置工具包。
- Windows环境下:
打开conf文件夹中的dbinfo.properties文件,根据实际需要进行配置。ADB源的配置参考下图:
图16 配置DataCheck
文件中的密码src.passwd和dws.passwd可使用工具,执行以下命令生成密文。
encryption.bat password
运行成功后会在本地bin目录下生成加密文件,如下图。
- Linux环境下:
其他步骤相同。密文生成方法与上文中Window环境下的方法类似,命令为sh encryption.sh [password]。
- Windows环境下:
- 执行数据校验。
Windows环境下:
- 打开check.input文件,将要校验的数据库(不填默认使用conf配置文件内的内容)、源表、目标端表填入,Row Range可根据需要填写特定范围的数据查询语句。
- 源端的库名在配置文件中配置后,check.input文件中的源端会默认填写配置文件中的库名,若check.input文件中填入其他库名,以check.input文件中的优先级为高。
- 校验级别Check Strategy支持high、middle、low三种,若未填写,默认为low。
下图为元数据对比的check_input文件。
图17 check_input
- 在bin目录下使用命令datacheck.bat执行校验工具:
- 查看已生成的校验结果 check_input_result.xlsx:
下图为源端元数据与目标端不一致的结果。
Linux环境下:
- 编辑check_input.xlsx文件并上传,参考Window环境下的第一步。
- 使用命令sh datacheck.sh执行校验工具。
- 查看校验结果check_input_result.xlsx(校验结果分析与Windows场景相同)。
- 打开check.input文件,将要校验的数据库(不填默认使用conf配置文件内的内容)、源表、目标端表填入,Row Range可根据需要填写特定范围的数据查询语句。
参考信息
文件或文件夹 |
说明 |
|
---|---|---|
DataCheck |
bin |
保存校验工具入口脚本。
|
conf |
配置文件,进行源数据库和目的数据库的连接配置和日志打印设置。 |
|
lib |
保存校验工具运行所需的相关jar包。 |
|
check_input.xlsx |
|
|
logs |
压缩包中不包含该文件,校验工具执行后自动生成,记录工具运行过程日志。 |
|
check_input_result.xlsx |
压缩包中不包含该文件,执行校验工具后会在check_input.xlsx相同路径下生成校验结果文件。 |
DataCheck工具介绍 |
---|
|
校验级别 |
校验说明 |
校验相关语法 |
---|---|---|
低 |
|
|
中 |
|
|
高 |
|
|