AnalyticDB PostgreSQL(以下简称ADB PG版)作为阿里云上热门的实时数仓产品,已经赢得大量对大规模数据实时分析需求客户的肯定,目前在阿里云上已经提供了多种方式(包括但不限于 DataWorks DTS rds_dbsync 等)将数据从MySQL中同步到ADB PG版中进行数据分析。但是有点缺陷的是,由于ADB PG版是一个分布式的分析型数据库,表结构的定义和传统的关系型数据库差异较大,前面的工具中都没有提供表结构的同步,这也成为困扰客户的问题,因此我们基于开源工具贴身做了个表结构转换的工具。

该工具主要提供将MySQL中的表结构转换为ADB PG版规范的表结构,只需要有简单的python环境和mysqldump就可以使用。MySQL中的无主键表需要单独处理一下,因为ADB PG版在建表时是需要指定分布列的,工具默认会将MySQL中的主键列设置为分布列,对于无主键表,用户需要修改生成的建表语句,为无主键表指定分布列。

db_converter的github地址: https://github.com/wuchase/mysql-postgresql-converter

  • 使用mysqldump dump出PG兼容的MySQL建表语句(修改下面语句中的databasename和dumpfile.sql),此处dump语句很重要,一定要转为PG兼容的建表语句:
    mysqldump --opt --compatible=postgresql --default-character-set=utf8 -d databasename -r dumpfile.sql -u username -p
  • 执行转换脚本,dumpfile.sql和adbforpg.sql填写真实的值
    python db_converter.py dumpfile.sql adbforpg.sql

    adbforpg.sql是转换后的ADB for PG的建表语句,如果需要有需改需求,可以直接在文件中进行修改。重点要关注一下分布列的选择,默认选择MySQL表中的主键作为分布列,如果MySQL表结构中无主键,请手动修改选择分布列。

    Java连接MySQL数据库。编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计。
    Java连接MySQL数据库。编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计。
    mysql从5.7迁移表结构到5.5报错 near '(0) NULL DEFAULT NULL'
    解决该问题(或者说从根源上避免遇到此类问题),应该保证开发环境的一致,同一项目的所有开发人员都应该保持所有环境的版本号一致(最好精确到小版本) 如果只是为了临时在mysql5.5完成测试,并且确认业务程序不需要使用到时间的小数秒,可以将sql文件中的长度设置删除,然后导入
  •