“移山”法宝~阿里数据库迁移项目yugong(愚公)开源啦!【内有详解】

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 阿里数据库迁移项目yugong开源啦!yugong解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生,其要解决的目标就是帮助用户完成从Oracle数据迁移到MySQL上,完成去IOE的第一步。DBA的小伙伴们赶快来围观!

项目简介

yugong(意译:愚公)项目是阿里的开源项目,该项目使用纯Java开发,主要作用是进行数据库迁移,目前该项目主要支持从oracle数据库向Mysql和DRDS数据库进行迁移。


项目背景

08年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生,其要解决的目标就是帮助用户完成从Oracle数据迁移到MySQL上,完成去IOE的第一步。


项目介绍

架构

d2cc2ddbc6569788e30a0e71bdf709011560fdb9

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的数据迁移流程

整个数据迁移过程主要分为全量迁移增量迁移两个部分。


575cb5340efb30bab3746bf86ca3bb1f7b32b2c9

迁移的大致过程如下:

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日志文件,比如LogMinerOGG

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的性能测试


相关资料

1.yugong简单介绍ppt : ppt

2.分布式关系型数据库服务DRDS (前身为阿里巴巴公司的Cobar/TDDL的演进版本, 基本原理为MySQL分库分表)


相关实践学习
Polardb-x 弹性伸缩实验
本实验主要介绍如何对PolarDB-X进行手动收缩扩容,了解PolarDB-X 中各个节点的含义,以及如何对不同配置的PolarDB-x 进行压测。
相关文章
|
1月前
|
数据库 开发者
参与TiDB社区,共筑开源数据库的未来
【2月更文挑战第25天】TiDB社区作为开源数据库项目的重要一环,汇聚了众多数据库爱好者与开发者。本文旨在鼓励读者积极参与TiDB社区,通过贡献代码、分享经验、参与讨论等方式,共同推动TiDB的发展。文章将介绍TiDB社区的特点、参与方式以及贡献的意义,帮助读者了解并融入这个充满活力的开源社区。
|
1月前
|
NoSQL Java 数据库
【问题篇】springboot项目通过数据库限制实例端口号
【问题篇】springboot项目通过数据库限制实例端口号
19 0
|
2月前
|
编解码 人工智能 数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
Google Earth Engine(GEE)——全球道路盘查项目全球道路数据库
43 0
|
2月前
|
数据库
电子书阅读分享《开源数据库工作室推广计划》
电子书阅读分享《开源数据库工作室推广计划》
18 1
|
3月前
|
Cloud Native 关系型数据库 分布式数据库
阿里云原生数据库 PolarDB MySQL:云原生时代的数据库新篇章
阿里云原生数据库 PolarDB MySQL,它是阿里云自主研发的下一代云原生关系型数据库。PolarDB具有多主多写、多活容灾、HTAP等特性,交易性能和存储容量均表现出色。此外,PolarDB MySQL Serverless具有动态弹性升降资源和全局一致性等特性,能够适应高吞吐写入和高并发业务场景。本文详细分析了PolarDB的性能、稳定性和可扩展性,以及它在成本、性能和稳定性方面的优势。PolarDB为企业提供了高效、可靠的数据库解决方案,是值得考虑的选择。
301 0
|
3月前
|
前端开发 IDE Java
基于Springboot+MYSQL+Maven实现的宠物医院管理系统(源码+数据库+运行指导文档+项目运行指导视频)
基于Springboot+MYSQL+Maven实现的宠物医院管理系统(源码+数据库+运行指导文档+项目运行指导视频)
164 0
|
2天前
|
关系型数据库 OLAP 分布式数据库
「杭州*康恩贝」4月26日PolarDB开源数据库沙龙,开启报名!
4月26日周五,PolarDB开源社区联合康恩贝将共同举办开源数据库技术沙龙,本次沙龙我们邀请了众多数据库领域的专家,期待大家的参与!
「杭州*康恩贝」4月26日PolarDB开源数据库沙龙,开启报名!
|
6天前
|
SQL 监控 druid
Druid数据库连接池简介及应用推广(老项目翻出来做下记录)
Druid数据库连接池简介及应用推广(老项目翻出来做下记录)
|
12天前
|
运维 关系型数据库 分布式数据库
「合肥 * 讯飞」4 月 19 日 PolarDB 开源数据库沙龙,报名中!
4月19日周五,PolarDB开源社区联合科大讯飞共同举办开源数据库技术沙龙,本次沙龙我们邀请了众多数据库领域的专家,期待大家的参与!
「合肥 * 讯飞」4 月 19 日 PolarDB 开源数据库沙龙,报名中!
|
1月前
|
NoSQL 关系型数据库 Linux
Star 1.6k!当Web遇上Linux和数据库!一站式管理平台的开源之旅!
Star 1.6k!当Web遇上Linux和数据库!一站式管理平台的开源之旅!

热门文章

最新文章