使用数据传输DTS可以将本地MySQL实例的数据迁移到RDS for MySQL实例。DTS提供的增量数据同步功能,可以实现在本地应用不停服的情况下,平滑完成MySQL数据的迁移工作。
本小节简单介绍使用DTS进行MySQL->RDS For MySQL数据迁移的任务配置流程。
迁移步骤
对于MySQL->RDS For MySQL数据迁移,DTS支持结构迁移、全量数据迁移及增量数据迁移,这个迁移类型的功能及限制如下:
-
结构迁移
数据传输会将迁移对象的结构定义迁移到目标实例。目前DTS支持结构迁移的对象有:表、视图、触发器、存储过程、存储函数。
-
全量数据迁移
全量迁移将MySQL实例的存量数据全部迁移到目标RDS实例。
如果用户只进行全量数据迁移,那么迁移过程中本地MySQL实例新增的业务写入不会被同步到目标RDS实例。
如果用户还选择了增量数据迁移,那么全量迁移过程中,为了保证迁移数据一致性,无主键的非事务表会被锁定,锁定期间这些表无法写入,锁定时长依赖于这些表的数据量大小,在这些无主键非事务表迁移完成后,锁才会释放。
-
增量数据迁移
增量迁移会将迁移过程中,本地MySQL实例的增量变更数据同步到目标RDS实例,增量数据迁移可以实现本地MySQL实例在迁移过程中产生的增量数据被实时同步到目标库,最终实现本地MySQL同目标RDS实例进入动态数据同步的过程。
迁移限制
- 迁移过程中,不支持DDL操作
- 结构迁移不支持event的迁移
- 如果使用了对象名映射功能后,依赖这个对象的其他对象可能迁移失败
- 当选择增量迁移时,源MySQL实例需要开启binlog
- 当选择增量迁移时,源库的binlog_format 要为row
- 当选择增量迁移且源MySQL如果为5.6及以上版本时,它的binlog_row_image必须为full
迁移权限要求
当使用DTS进行MySQL->RDS For MySQL迁移时,在不同迁移类型,对源跟目标MySQL实例的迁移帐号权限要求如下:
迁移类型 | 结构迁移 | 全量迁移 | 增量迁移 |
---|---|---|---|
本地MySQL实例 | select | select |
super select replication slave replication client |
目的RDS实例 | 读写权限 | 读写权限 | 读写权限 |
迁移流程
DTS 在进行MySQL->RDS For Mysql数据迁移时,为了解决对象间的依赖关系,提高迁移成功率。结构对象及数据的迁移顺序如下:
- 结构对象:表、视图的迁移
- 全量数据迁移
- 结构对象:存储过程、函数、触发器、外键的迁移
- 增量数据迁移
如果任务没有选择增量数据迁移,那么当全量数据迁移完成后,任务列表中的迁移进度为:结构迁移100%,全量迁移100%,迁移状态为“迁移中”。此时迁移任务正在进行步骤(3)中的对象的迁移。此时,请勿手动结束任务,否则会造成迁移数据丢失。
迁移任务配置
下面详细介绍使用DTS将本地的MySQL迁移到RDS for MySQL的任务配置流程。
RDS实例数据库创建
在数据迁移过程中,如果待迁移的数据库在目标RDS实例中不存在,那么DTS自动会创建。但是对于如下两种情况,用户需要在配置迁移任务之前,手动创建数据库。
- 数据库名称不符合:RDS定义规范(由小写字母、数字、下划线、中划线组成,字母开头,字母或数字结尾,最长64个字符)。
- 待迁移数据库,在Oracle跟目标RDS实例中名称不同。
对于这两种情况,用户需要在配置迁移任务之前,先在RDS控制台完成数据库创建。具体参考RDS数据库创建流程RDS使用手册。
迁移帐号创建
迁移任务配置,需要提供本地MySQL数据库及目标RDS实例的迁移账号。迁移账号所需权限详见上文的 迁移权限要求。
如果源MySQL实例迁移账号尚未创建,那么您可以参考 Grant语法说明,创建满足权限要求的迁移账号。
如果目标RDS实例迁移账号创建,那么您可以参考 RDS账号创建流程,创建对待迁移数据库有读写权限的迁移账号。
其他准备工作
如果需要进行增量迁移,那么需要确认源库的binlog是否开启,格式是否满足要求。具体确认项如下。
-
确认源库的binlog是否开启。
如果这里面查询出来的log_bin=OFF,那么说明源库没有开启binlog,这个时候如果需要使用增量迁移的话,需要修改本地MySQL的binlog配置,打开binlog日志。
- 开启二进制日志,修改log_bin=mysql_bin。
- 设置binlog模式为row,修改binlog_format=row。
- 配置server_id大于1,即server_id=某一个大于1的整数。
- 如果版本为5.6,修改binlog_row_image=full。
- 修改完成后,重启MySQL进程。
-
确认源库的binlog格式为row模式。
使用上面的命令确认本地MySQL的binlog格式是否为row,如果查询出来的结果不为ROW的话,那么通过如下的参数设置命令将模式修改为row。
当修改完成后,最好将已有的老连接KILL掉重连,否则可能出现其他的连接依然使用statement格式记录binlog日志。
-
当本地MySQL版本大等于5.6.2时,确认源库的binlog_row_image=full。
如果查询出来的结果不为FULL的话,那么通过如下的参数设置命令将其修改为full。
迁移任务配置
当数据库、迁移账号都创建完成后,就可以开始配置迁移任务了。下面详细介绍下具体的配置步骤。
- 进入数据传输DTS控制台,点击右上角的创建迁移任务,开始任务配置。
-
本地MySQL及目标RDS实例连接信息配置。
在这个步骤中,主要配置迁移任务名称,迁移源实例及目标实例连接信息。其中:
-
任务名称
默认情况下,DTS为每个任务自动生成一个任务名称。任务名称没有唯一性要求,您可以修改这个名称,为任务配置一个具有业务意义的名称,便于后续的任务识别。
-
源实例连接信息
- 实例类型:选择 有公网IP的自建数据库
- 数据库类型:选择 MySQL
- 主机名或IP地址:配置本地MySQL数据库访问地址,这个地址必须为公网访问方式
- 端口:MySQL实例监听端口
- 账号:MySQL实例访问账号
- 密码:上面MySQL访问账号对应的密码
-
目标RDS实例连接信息。
- 实例类型:选择 RDS实例
- RDS实例ID: 配置迁移的目标RDS实例的实例ID。 DTS支持经典网络、VPC网络的RDS实例
- 数据库账号:RDS实例的连接账号
- 数据库密码:上面数据库账号对应的数据库密码
-
-
迁移对象及迁移类型配置。
-
迁移类型
DTS支持 结构迁移、全量数据迁移、增量数据迁移。
如果需要进行不停机迁移,那么需要选择:结构迁移+全量数据迁移+增量数据迁移。
如果只进行全量迁移,那么需要选择:结构迁移+全量数据迁移。
-
迁移对象
迁移对象,需要选择您要迁移的对象。迁移对象选择的粒度可以为:库、表、列三个粒度。
默认情况下,对象迁移到RDS实例后,对象名跟本地MySQL实例一致。如果您迁移的对象在源实例跟目标实例上名称不同,那么需要使用DTS提供的对象名映射功能,详细使用方式可以参考库表列映射。
当配置完迁移对象及迁移类型后,即进入任务启动前的预检查步骤
-
-
预检查。
在迁移任务正式启动之前,会先进行前置预检查,只有预检查通过后,才能成功启动迁移。
如果预检查失败,那么可以点击具体检查项后的按钮,查看具体的失败详情,并根据失败原因修复后,重新进行预检查。
-
启动迁移任务。
当预检查通过后,我们可以启动迁移任务,任务启动后,可以到任务列表中查看任务具体的迁移状态及进度。
增量数据迁移是个动态同步的过程,所以建议在增量迁移达到无延迟状态时,在目标数据库上进行业务验证,如果验证成功,那么可以停掉迁移任务,然后将业务切换到目标数据库。
至此,完成将本地MySQL数据库到RDS For MySQL的数据迁移任务配置