openGauss-MySQL在线迁移工具支持迁移对象开发合作项目实践心得
收藏回复举报
openGauss-MySQL在线迁移工具支持迁移对象开发合作项目实践心得
新人帖
发表于2022-11-02 09:59:24
0 查看

首先十分感谢我的导师汤德佑副教授带领我参与到openGauss-MySQL在线迁移工具支持迁移对象开发项目中,让我第一次体验到正式的企业项目。同时也十分荣幸能参与到华为鲲鹏众智项目中,能为鲲鹏生态的建设出一份微薄之力。

项目概要

为了完善openGauss在数据库领域的生态,华为openGauss3.0.0版本发布的工具链中新增的迁移工具Chameleon,可实现MySQL5.5+版本到openGauss2.1.0+版本的数据迁移,即把数据库的表数据进行迁移,具有灵活易用、操作简便等特点。但该工具目前无法将数据库对象——视图、触发器、自定义函数、自定义存储过程进行迁移。视图、触发器、自定义函数、自定义存储过程作为数据库重要的组成成员,在业务系统开发中使用极其广泛,只有能实现上述对象的迁移才能方便用户实现全方位的自动化数据库切换。本项目将对迁移工具Chameleon进行功能扩展,设计与实现在离线迁移过程中对视图、触发器、自定义函数、自定义存储过程的支持。将MySQL端的这四类数据库对象通过Chameleon工具在openGauss端进行重演,实现兼容。

方案设计

根据对象迁移的特点,我们分析了数据库对象的迁移任务,得出实现的框架如下:

  1. 抽取MySQL对象。驱动连接到MySQL,提取对象元数据。
  2. SQL语句翻译。除了创建视图语句、创建触发器语句、创建自定义函数语句、创建存储过程语句的翻译,更复杂的是视图涉及的select语句,触发器体涉及的及INSERT子句、UPDATE子句、DELETE子句以及控制流语句,自定义函数体和存储过程体涉及的了 DDL 语句、 DML 语句、Transaction 语句、 Compound 语句、Administraion语句等几乎涵盖所有MySQL的SQL语句的翻译。
  3. openGauss端重演。将翻译后的openGauss风格的对象创建语句重演到openGauss。
  4. 记录迁移结果。语句翻译过程中难免遇到无法兼容的字段或语句,因此有必要记录对象迁移记录,以备用户查阅,包括成功与否、翻译前后语句对比等。 true

其中,SQL语句的翻译为本项目的重点攻克难点,在项目调研初期,我们调研了多种SQL词法语法解析器,通过多方面的对比,我们最后决定采用基于Druid工具,在Chameleon中实现MySQL语法到openGauss语法的SQL语句翻译。通过改写Druid SQL Parser的AST树的输出以达到SQL语句翻译,为此我们也开发了仓库openGauss-tools-sql-translator,通过调用openGauss-tools-sql-translator,chameleon完成MySQL语法到openGauss语法的转换。 true

心得体会

从项目的初期调研到详细方案的确定,再到具体的开发编程(比如繁琐的SQL语句翻译及校验),还有最后的测试、解决每个问题单,我都参与其中。通过和团队成员的分工合作、默契配合,我们如期交付了项目。在这个过程中我学到了非常多的知识,比如我能更加熟练地使用git工具,对各个数据库的SQL语句语法差异有了更清晰地认识,团队协作能力、项目管理能力、编程能力等都有了很大的提高,同时,通过切身体验与企业合作进行开发的工作流程,极大丰富了我的项目实践经验。 鲲鹏众智计划提供了一个很好的平台让我们为扩大国产生态影响提供智慧和力量。希望之后我还有机会参与到其他的鲲鹏众智项目中,也相信将会有越来越多的优秀人才加入到鲲鹏的生态建设,一起为鲲鹏生态的繁荣发展做贡献。

华南理工大学-软件学院-TxDB实验室-何馨誉

指导老师:汤德佑

本帖最后由 匿名用户2023/11/17 15:15:22 编辑

我要发帖子