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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 阿里数据库迁移项目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日志文件,比如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开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
目录
打赏
0
0
0
3
4868
分享
相关文章
【瑶池数据库动手活动及话题本周精选(体验ADB、 SelectDB,参与 RDS 迁移训练营)】(4.21-4.27)
本文为 “瑶池数据库动手活动及话题精选” 系列第一期,聚焦 SelectDB 日志分析、AnalyticDB Zero-ETL 集成、RDS 迁移训练营三大实战,设积分、实物等多重奖励,同步开启话题互动。点击链接参与,每周解锁数据库实战新场景。
用 YashanDB Migration Platform,数据库迁移不再是“高风险动作”
数据库迁移一直是企业信息化中的难题,耗时长、风险高。YashanDB Migration Platform(YMP)提供一站式解决方案,涵盖评估、改写、迁移与校验全流程。其核心能力包括SQL自动适配、智能对象迁移、高性能数据通道及数据对比校验,显著降低人力成本与业务风险。适合从Oracle、MySQL等迁移到YashanDB的企业,以及需异构整合或国产化替代的集团、政府和国企项目。YMP不仅是工具,更是推动数据库国产化的关键平台。
16.1k star! 只需要DDL就能一键生成数据库关系图!开源神器ChartDB让你的数据结构"看得见"
ChartDB是一款开源的数据库可视化神器,通过一句智能查询就能自动生成专业的数据库关系图。无需安装客户端、不用暴露数据库密码,打开网页就能完成从数据建模到迁移的全流程操作,堪称开发者的"数据库透视镜"。
121 67
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
130 1
PolarDB开源数据库进阶课11 激活容灾(Standby)节点
本文介绍了如何激活PolarDB容灾(Standby)节点,实验环境依赖于Docker容器中用loop设备模拟共享存储。通过`pg_ctl promote`命令可以将Standby节点提升为主节点,使其能够接收读写请求。激活后,原Standby节点不能再成为PolarDB集群的Standby节点。建议删除对应的复制槽位以避免WAL文件堆积。相关操作和配置请参考系列文章及视频教程。
71 1
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
167 0
PolarDB开源数据库进阶课14 纯享单机版
PolarDB不仅支持基于“共享存储+多计算节点”的集群版,还提供类似开源PostgreSQL的单机版。单机版部署简单,适合大多数应用场景,并可直接使用PostgreSQL生态插件。通过Docker容器、Git克隆代码、编译软件等步骤,即可完成PolarDB单机版的安装与配置。具体操作包括启动容器、进入容器、克隆代码、编译软件、初始化实例、配置参数及启动数据库。此外,还有多个相关教程和视频链接供参考,帮助用户更好地理解和使用PolarDB单机版。
115 0
PolarDB开源数据库进阶课13 单机版转换为集群版
本文介绍如何将“本地存储实例”转换为“共享存储实例”,依赖于先前搭建的实验环境。主要步骤包括:准备PFS二进制文件、格式化共享盘为pfs文件系统、启动pfsd服务、停库并拷贝数据到pfs内、修改配置文件,最后启动实例。通过这些操作,成功实现了从本地存储到共享存储的转换,并验证了新实例的功能。相关系列文章和视频链接提供了更多背景信息和技术细节。
54 0

热门文章

最新文章