摘要: 阿里数据库迁移项目yugong开源啦!yugong解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生,其要解决的目标就是帮助用户完成从Oracle数据迁移到MySQL上,完成去IOE的第一步。DBA的小伙伴们赶快来围观!
项目简介
yugong(意译:愚公)项目是阿里的开源项目,该项目使用纯Java开发,主要作用是进行数据库迁移,目前该项目主要支持从oracle数据库向Mysql和DRDS数据库进行迁移。
项目背景
08年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生,其要解决的目标就是帮助用户完成从Oracle数据迁移到MySQL上,完成去IOE的第一步。
项目介绍
架构
1. 一个Jvm Container对应多个instance,每个instance对应于一张表的迁移任务
2. instance分为三部分
a. extractor (从源数据库上提取数据,可分为全量/增量实现)
b. translator (将源库上的数据按照目标库的需求进行自定义转化)
c. applier (将数据更新到目标库,可分为全量/增量/对比的实现)
yugong架构特点
1.全量+增量任务 (减少复杂度)
2.JDBC协议 (解决环境兼容性)
3.oracle物化视图 (解决记录增量日志)
4.引入translator扩展 (解决异构数据转化)
yugong支持的功能
同构功能支持:
1.Oracle -> Mysql
2.Oracle -> Oracle
异构功能支持:
1. 编码不同
2. 库名/表名不同
3. 字段名字不同
4. 字段类型不同字段个数不同(多几个,少几个)
yugong的数据迁移流程
整个数据迁移过程主要分为全量迁移和增量迁移两个部分。
迁移的大致过程如下:
1.增量数据收集 (创建oracle表的增量物化视图)
2.进行全量复制
3.进行增量复制 (可并行进行数据校验)
4.原库停写,切到新库
回滚方案:开启新库到老库的数据回流
Yugong的使用限制
1.数据库权限 基本CRUD,物化视图操作等
2.增量同步不支持主键变更
3.需要先delete,后insert 源和目标类型不兼容时需要自定义转换逻辑源库为number,目标库varchar不支持, 目标为int/decimal可自动处理
4.增量同步对oracle库压力 物化视图和回表查询都会对源库产生比较大的影响