本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
由于业务需求,需要变更表的字符集(例如从gbk变更为utf8mb4),如果直接使用ALTER命令修改字符集会锁表,当数据表过大时,对业务的影响较大。
本文介绍的操作方法需要先在目标实例中创建表结构信息(新字符集),再通过DTS将源实例的数据迁移至目标实例,同时可建立简易回滚方案或双写方案,平滑地完成RDS MySQL字符集的变更。
注意事项
- 在执行变更字符集之前,请对业务和SQL进行充分的兼容性测试和功能验证,确认正常后再执行本操作。 
- DTS在执行全量数据迁移时将占用源实例和目标实例一定的读写资源,可能会导致数据库的负载上升。因此您需要在执行数据迁移前评估源实例和目标实例的性能,同时建议您在业务低峰期执行数据迁移。 
- 如果源实例的待迁移对象没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标实例中出现重复数据。 
步骤一 将源实例中表的结构导入至新实例中
本示例中通过DMS登录的实例的管控模式均为自由操作。
- 导出源实例中需要变更字符集的表的结构脚本。 - 通过DMS登录源实例,详情请参见通过DMS登录RDS数据库。 
- 在顶部菜单栏中,选择。 说明- 此操作需要预先在页面右上方的  中,打开顶部下拉菜单的开关。 中,打开顶部下拉菜单的开关。
- 设置导出信息。  说明 说明- 由于目标实例的管控模式不同,您需要配置的参数和配置流程可能有所差异息。更多信息,请参见数据库导出。 - 配置 - 说明 - 申请的数据导出类别 - 选择数据库导出。 - 数据库名 - 选择目标数据库。 说明- 您需要有该库的导出权限,更多信息,请参见查看我的权限。 - 导出的表 - 本示例选择为部分表,您可以根据需求选择部分表或全部表。 说明- 若您选择部分表,则需要在页面右侧选中表并配置过滤条件。 - 导出内容 - 选择为结构。 - 导出格式 - 本示例默认固定选择为SQL,且无法变更。 - 导出结构类型 - 根据业务需求选择导出的结构类型。 - 存储过程 
- 函数 
- 触发器 
- 视图 
- 事件 
 说明- 不同类型的数据库支持的导出结构类型不同,请以控制台为准。 - 更多选项 - 单击大数据导出选项或SQL脚本拓展选项,然后选中对应的导出选项。 
- 单击提交申请,等待审批完成。 
- 审批通过后,在下载区域框,单击下载导出文件。  
 
- 解压下载的文件,然后修改表结构脚本,调整字符集配置信息,将其更换为需要变更的目标字符集。  
- 新购一个与源实例规格相同的RDS MySQL实例,详情请参见快速创建RDS MySQL实例。 
- 将修改后的表结构脚本导入至新的RDS MySQL实例中。 - 通过DMS登录新的RDS MySQL实例,详情请参见通过DMS登录RDS数据库。 
- 在顶部菜单栏中,选择。 
- 设置导入信息。 说明- 由于目标实例的管控模式不同,您需要配置的参数和配置流程可能有所差异。更多信息,请参见数据导入。 - 配置项 - 说明 - 申请的数据变更类别 - 选择批量数据导入。 - 数据库 - 数据导入操作的目标数据库。 说明- 管控模式为自由操作或稳定变更的实例数据库需要登录后方可选择。 - 文件编码 - 选择数据库的文件编码: - UTF-8 
- GBK 
- ISO-8859-1 
- 自动识别 
 - 导入模式 - 选择导入模式,当前支持两种导入模式: - 极速模式:在执行阶段读取文件,将SQL语句直接执行到指定的目标库。该模式安全性相比安全模式要低,但是执行时效较高。 说明- 管控模式为安全协同的安全规则配置默认未开启支持极速模式导入数据。您可以在对应安全规则的中开启该检测项。 
- 安全模式:预检查阶段会解析文件并将SQL或CSV数据缓存入库,执行时再从缓存库中读出来执行到指定的目标库。该模式安全性较好,但是执行时效相比极速模式要低。 
 - 文件类型 - 选中导入数据的文件类型。 - SQL脚本:安全协同模式下,默认仅放开INSERT和REPLACE命令类型。如需调整,可以由DBA或管理员在安全规则 > SQL变更 > 批量数据导入中修改。 
- CSV格式:文件中的分隔符必须为逗号。 
- Excel格式:Excel文件中可以有表头(属性),也可以直接是数据。 
 - 附件 - 单击上传文件上传附件。 说明- 支持SQL、CSV、TXT、XLSX和ZIP文件类型。 
- 附件最大不能超过5 GB。 
 - 其他选项 - 选择是否忽略异常报错。 - 不忽略(不选中):系统默认。系统遇到异常会停止执行后续SQL并报错。 
- 忽略(选中):系统执行失败会忽略异常,并继续执行后续SQL。 
 
- 单击提交申请,等待系统预检查通过,如果预检查失败,请根据提示检查失败原因后重新提交申请。 说明- 系统会预检查您上传的SQL,如果是CSV文件,会生成相应的 - INSERT语句。
- 待审批通过后,在执行区域,单击执行变更。  
- 在任务设置对话框中,选择工单执行时间。可以选择是否立即执行,如果不想立即执行,可以关闭是否立即执行开关,并选择一个期望开始执行时间,系统会在该时间自动执行。单击确定执行。  - 执行方式如下: - 立即执行:系统默认。单击确定执行后,立即执行工单。 
- 定时执行:选择任务开始执行时间。单击确定执行后,系统会在设定的时间自动执行任务。 
 说明- 执行期间,系统流式读取已解析的SQL,分批执行到数据库(每批大小1 MB)。 
- 您可以在执行区域,查看任务执行状态、任务SQL检查详情和调度日志。 
- 已暂停的任务,重启后,会根据导入模式选择从头执行任务,还是从暂停位置执行。 - 极速模式:暂停任务后重启,将从头开始执行脚本或导入数据文件。 
- 安全模式:暂停任务后重启,将从暂停位置继续执行脚本或导入数据文件。 
 
 
- 导入成功后,您可以通过执行 - show create table <表名>;命令来确认表的字符集信息。
 
步骤二 将源实例中表的数据迁移至新的实例
- 登录数据传输控制台。 说明- 若数据传输控制台自动跳转至数据管理DMS控制台,您可以在右下角的  中单击 中单击 ,返回至旧版数据传输控制台。 ,返回至旧版数据传输控制台。
- 若您登录的是新版数据传输控制台,您可以单击右下角的  ,返回至旧版数据传输控制台。 ,返回至旧版数据传输控制台。
 
- 在左侧导航栏,单击数据迁移。 
- 在迁移任务列表页面顶部,选择迁移的目标集群所属地域。 
- 单击页面右上角的创建迁移任务。 
- 配置迁移任务的源库及目标库信息。  - 类别 - 配置 - 说明 - 任务名称 - - - DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。 - 源库信息 - 实例类型 - 选择RDS实例。 - 实例地区 - 选择源RDS实例所属地域。 - RDS实例ID - 选择源RDS实例ID。 - 数据库账号 - 填入源RDS实例的数据库账号(需具备待迁移库的读写权限)。 - 数据库密码 - 填入该数据库账号对应的密码。 说明- 源库信息填写完毕后,您可以单击数据库密码后的测试连接来验证填入的源库信息是否正确。源库信息填写正确则提示测试通过;如果提示测试失败,单击测试失败后的诊断,根据提示调整填写的源库信息。 - 连接方式 - 根据需求选择非加密连接或SSL安全连接。如果设置为SSL安全连接,您需要提前开启RDS实例的SSL加密功能,详情请参见设置SSL加密。 - 目标库信息 - 实例类型 - 选择RDS实例。 - 实例地区 - 选择目标RDS实例所属地域。 - RDS实例ID - 选择目标RDS实例ID。 - 数据库账号 - 填入目标RDS实例的数据库账号(需具备迁入的目标库的读写权限)。 - 数据库密码 - 填入该数据库账号对应的密码。 说明- 目标库信息填写完毕后,您可以单击数据库密码后的测试连接来验证填入的目标库信息是否正确。目标库信息填写正确则提示测试通过;如果提示测试失败,单击测试失败后的诊断,根据提示调整填写的目标库信息。 - 连接方式 - 根据需求选择非加密连接或SSL安全连接。如果设置为SSL安全连接,您需要提前开启RDS实例的SSL加密功能,详情请参见设置SSL加密。 
- 配置完成后,单击页面右下角的授权白名单并进入下一步。 说明- 此步骤会将DTS服务器的IP地址自动添加到RDS MySQL的白名单中,用于保障DTS服务器能够正常连接源和目标实例。 
- 选择迁移类型和迁移对象。  - 配置 - 说明 - 迁移类型 - 由于已经在步骤一中完成了结构迁移,此处无需勾选结构迁移。 - 如果只需要全量迁移,仅勾选全量数据迁移。 警告- 为保障数据一致性,全量数据迁移期间请勿在源实例中写入新的数据。 
- 如果需要不停机迁移,同时勾选全量数据迁移和增量数据迁移。 说明- 增量数据迁移阶段支持同步的SQL操作为:INSERT、UPDATE、DELETE、CREATE TABLE、ALTER TABLE、RENAME TABLE、TRUNCATE TABLE、DROP TABLE。 
 - 迁移对象 - 在迁移对象框中选择待迁移的对象(该对象的结构须已在步骤一中完成了迁移),然后单击  将其移动至已选择对象框。 警告 将其移动至已选择对象框。 警告- 由于已完成了结构迁移,请勿执行对象名映射操作,否则将导致迁移失败。 
- 启动迁移任务。 - 单击页面右下角的预检查并启动。 说明- 在迁移任务正式启动之前,会先进行预检查。只有通过预检查,DTS才能迁移数据。 
- 如果预检查失败,单击具体检查项后的  ,查看失败详情。根据提示修复后,重新进行预检查。 ,查看失败详情。根据提示修复后,重新进行预检查。
 
- 预检查通过后,单击下一步。 
- 在弹出的购买配置确认对话框,选择链路规格并勾选数据传输(按量付费)服务条款。 
- 单击购买并启动,迁移任务正式开始。 
 
步骤三 业务切换
您可以根据业务需求选择下述方案执行业务切换。
- 简易回退方案(有一定的回滚失败风险,无需改造业务的应用程序) - 在目标RDS MySQL实例中完成迁移后的数据校验。 
- 参考业务切换流程文档中介绍的流程执行业务切换并建立回退方案(将目标库的增量数据实时迁移回源库中)。 
- 回退方案保持一个业务周期,测试完所有功能,确认无误后可结束回退方案中创建的反向数据迁移任务。 
- 可选:如不再需要源实例,可将其释放(按量付费实例)或退订(包年包月实例)。 
 
- 双写方案(可保障回滚成功率,业务的应用程序改造量大) - 对业务的应用程序进行改造,让其实现双写的逻辑(即数据变更会同时向源和目标实例写入)。 
- 结束数据迁移任务。 - 全量数据迁移 请勿手动结束迁移任务,否则可能导致数据不完整。您只需等待迁移任务完成即可,迁移任务会自动结束。 
- 增量数据迁移 迁移任务不会自动结束,您需要手动结束迁移任务。 - 观察迁移任务的进度变更为增量迁移,并显示为无延迟状态时,将源库停写几分钟,此时增量迁移的状态可能会显示延迟的时间。
- 等待迁移任务的增量迁移再次进入无延迟状态后,手动结束迁移任务。 
 
 说明- 您可以登录源实例,执行 - show processlist;查看会话信息,确保没有新的会话执行写入操作。
- 全量数据迁移 
- 在目标RDS MySQL实例中完成迁移后的数据校验。 
- 将业务的应用程序设置为双写,即数据变更会同时写入源和目标实例。 
- 双写状态保持一个业务周期,测试完所有功能,确认无误后可调整为只写入目标实例。 
- 可选:如不再需要源实例,可将其释放(按量付费实例)或退订(包年包月实例)。