阿里数据库迁移项目yugong
来源:互联网 发布:网络几分钟断一次 编辑:程序博客网 时间:2024/06/04 19:23
摘要: 阿里数据库迁移项目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库压力 物化视图和回表查询都会对源库产生比较大的影响
数据迁移方案设计
全量方案
业界常用的全量方案有:
1.数据文件导入/导出,比如EXPDP/IMPDP, mysqldump/source, xtrabackup等
2.ETL数据导入/导出,主要原理为使用JDBC数据查询接口
yugong在项目设计之初考虑去IOE数据迁移的灵活性和自定义能力,最终选择的方案为基于JDBC接口遍历数据.
相比于数据文件导入/导出,其优点:
- 灵活数据同步
- 支持异构数据
- 实现相对简单
缺点:
- 全量拉取需要配合增量使用,会有部分数据重复同步
- 性能和影响,一次性全量拉取,如果持续时间过长,如果此时数据库变更过多,会导致segment过大
增量方案
业界常用的增量方案有:
1.基于时间戳定时dump
2.oracle日志文件,比如LogMiner,OGG
3.oracle CDC(Change Data Capture)
4.oracle trigger机制,比如DataBus , SymmetricDS
5.oracle 物化视图(materialized view)
6.当然还有很多...
yugong在项目设计之初考虑去IOE数据迁移的灵活性,支持多种oracle版本,同时为降低DBA的运维成本,最终选择oracle物化视图作为我们的增量方案.
相比于其他,物化视图方案其优点:
- 原理简单,方便理解和学习,用户可以理解为一种固化的简易trigger模式
- 运维简单,DBA一次账户授权后,程序可按需create一张物化视图表即可完成增量订阅
- 相对透明,不需要像时间戳sql扫描依赖数据库表设计,也不需要关注oracle版本和服务器存储等
缺点:
- 性能和影响,类似于trigger机制会对源库的数据写入造成一定的性能影响.
使用环境
yugong的使用环境比较广泛,yugong是采取纯Java开发,有bat和shell脚本,windows/linux均可运行。至于JDK,推荐使用1.6.25以上版本,稳定可靠,并且目前阿里巴巴也基本使用此版本。
数据库
源库为oracle,目标库可为mysql/drds/oracle. 基于标准JDBC协议开发,对数据库暂无版本要求,但需要的数据库账户权限。
yugong项目github
部署以及使用问题
快速开始使用yugong
yugong的性能测试
- 阿里数据库迁移项目yugong
- 阿里之yugong小实验
- 迁移阿里云的案例分享之数据库迁移过程
- 基于阿里开源yugong工具类,动态编译Java源文件
- 项目迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 数据库迁移
- 阿里云从Windows Server 2012迁移jsp+servlet+mysql项目到Linux系统
- 企业应用系统由oracle迁移到阿里云mysql数据库的思考
- 113. Path Sum II
- CentOS+Nginx一步一步开始配置负载均衡
- iOS加载控制器的三种方式
- Kali Linux渗透基础知识整理(一):信息搜集 20160726
- CNN进展与技巧(下)
- 阿里数据库迁移项目yugong
- NoHttp报错之Please invoke NoHttp.initialize(Application) on Application#onCreate()
- 题目244 16进制的简单运算
- Pyspider的安装使用
- Hibernate和Spring整合的时候,事务应该放在Service还是Dao
- Storm的一个坑,找不对jar包,别把jar包放在根目录
- 【步兵 lua】利用脚本的优势
- 如何在Eclipse下查看JDK源代码
- maven mybatis 自动生成