作者:马弓手三菜
传统的数据迁移一直是比较头疼的话题,可能需要停机做mysqldump,或者通过一些程序抓取写入到目标库,但这些程序往往缺少一个大规模的使用量,容易出现数据不一致的情况。
另外就是异构场景,即使像Oracle这种商业数据库有EXPDP 这些工具,但是异构场景,就没有用武之地了。
DTS 支持的迁移类型
数据源 结构迁移 全量迁移 增量迁移
Oracle->MySQL 支持 支持 支持
Oracle->RDS For PPAS 支持 支持 支持
Oracle->DRDS 不支持 支持 支持
Oracle->ADS 支持 支持 支持
Oracle->Oracle 支持 支持 支持
MySQL ->RDS For MySQL 支持 支持 支持
MySQL ->PostgreSQL 不支持 支持 支持
SQLServer->SQLServer 支持 支持 支持
PostgreSQL->PostgreSQL 支持 支持 支持
MongoDB -> MongoDB 支持 支持 支持
Redis -> Redis 支持 支持 支持
MySQL->DRDS 不支持 支持 支持
MySQL->PetaData 不支持 支持 支持
MySQL->OceanBase 支持 支持 支持
DB2->MySQL 支持 支持 支持
我们的DTS 主要分为 预检查、结构迁移、全量迁移、增量迁移几个阶段。
预检查,主要是检查连通性和账号权限,以及其他一些情况,比如是否有拓扑冲突。
结构迁移,主要是对表结构的DDL语句的迁移。 这里要注意下,增量迁移的过程目标实例最好不要用trigger,源库的触发器生成值,也会随binlog同步过来。
全量迁移,主要是基于SQL 查询,通过切片算法,分段把数据全量拉取过来。
如果需要增量更改的数据,那么就需要我们的增量迁移。 增量迁移是通过拉取源库的日志文件,如MySQL的binlog,sqlserver的LDF等,分析转储成适合目标实例的SQL语句,再增量并发写入到目标实例。
一、 云下机房上云迁移
https://help.aliyun.com/document_detail/26621.html?spm=a2c4g.11186623.6.601.cc2b3588wFTiPu
注意事项:
1) 权限
迁移类型 结构迁移 全量迁移 增量迁移
本地 MySQL 实例 select select super
select
replication slave
replication client
目标端 RDS for MySQL 实例 读写权限 读写权限 读写权限
2) 源库的binlog格式
binlog_format = row
binlog_row_image=full
3) 映射关系
DTS 迁移不能更改迁移对象,所以配置的时候,要选好映射关系
二、 云下机房和云上实例同步
https://help.aliyun.com/document_detail/66730.html?spm=a2c4g.11186623.6.631.571d2b32sICq3v
注意事项
1) 同步必须是内网,所以需要有专线、智能网关、VPN等,正确配置网络路由
关于专线的配置可以参考这篇
https://help.aliyun.com/document_detail/58143.html?spm=a2c4g.11186623.6.616.ccb169a7r7zrhq
2) 同步的其他配置和迁移类似,但是同步初始化完成后,可以更改同步对象
注意的是,每次更改后,需要等到新加入的对象同步初始化完成,才能进行下一次更改
3) 同步还支持双向同步,极大满足云上测试的前提。
https://help.aliyun.com/document_detail/56776.html?spm=a2c4g.11186623.6.627.6472636abYrkHY
双向同步需要注意的是,冲突策略,默认是冲突以后会中断
三、 其他云厂商的迁移与同步
https://help.aliyun.com/document_detail/52555.html?spm=a2c4g.11186623.6.596.cc2b3588wFTiPu
AWS
https://help.aliyun.com/document_detail/52904.html?spm=a2c4g.11186623.6.597.4f814a512mVENC
腾讯
需要注意的是,确认下其他云厂商的MySQL账号权限, 以及binlog的开放情况,如果能买到专线,速度也会更进一步。