数据库信息动态迁移:Pg、Hive、MySQL迁移到MySQL,

最近碰到个需求:

将其他系统的数据库信息迁移到本系统的MySQL数据库【定时】


image.png

解决逻辑:

1、获取到各类型数据库的建表语句,将其转换成MySQL建表语句,在MySQL中建表
2、读取各数据库的数据信息
3、INSERT 进入目标系统的数据库

实际操作

1、前端页面进行数据库信息的配置和需要读取的表信息配置,或者页面配置了部分,通过其他手段读取到其他信息
必传信息:host、port、db_type、schema、database。
其他信息:【定时访问周期】,用户名、密码最好也在前台配置【不过这边是写在文件中读取的】,配置需要拉取数据的表。

2、使用原始的JDBC方式和JDBCTemplate去进行操作。
当我们拿到上述的信息之后即可获取该数据库的数据库连接。

3、在上一步中获取到了数据库连接。接下来要分不同类型数据库进行处理。
MySQL【这里可能会涉及到版本问题,主要是utf8mb4的问题,写文时未考虑】:
由于本次源数据库中有MySQL,而目标数据库就是MySQL。同时MySQL有这样的语句来获取建表语句。
show create table TABLE_NAME
当获取到这个语句后,取出该建表语句,然后在目标库中执行即可。
其他【Pg、Hive】:
使用JDBC去读取元数据信息,来获取各字段的名称、类型、注释....还有表的注释信息。
之后使用字符串去进行拼接MySQL建表语句。【主要需要注意的是字段类型的转换】

代码部分


这个代码只是展示下我的执行顺序,JdbcVO就是前端所传的一些数据库信息,我这边的需求我需要转一下这个数据

  

    @Resource
    DatabaseUtils databaseUtils;

        /**
     * 调用jdbcjob
     * 

* 这个代码只是展示下我的执行顺序,JdbcVO就是前端所传的一些数据库信息,我这边的需求我需要转一下这个数据 *

* @param sysJob 系统工作 * @throws Exception 异常 */ public void invokeJDBCJob(JdbcVO jdbcVO) throws Exception{ // 1、创建JDBC基础连接信息对象 JDBCInfo jdbcInfo = databaseUtils.createJdbcInfo(jdbcVO); jdbcInfo.setUser(username); jdbcInfo.setPassword(password); // 2、判断表是否已在本系统库存在 if (!databaseUtils.isExistTable(jdbcVO.getTableName())) { // 3.1 生成本系统MySQL库建表语句 String ddl = databaseUtils.getDdl(jdbcInfo); System.out.println("————————开始建表————————"); System.out.println(ddl); // 3.2 建表 databaseUtils.createTable(ddl); System.out.println("————————建表完成—————————"); System.out.println("————————开始接入数据——————"); // 3.3 第一次建表,全量迁移数据 databaseUtils.transferAllData(jdbcInfo); System.out.println("—————————接入完成—————————"); }else { log.info("{}", "表存在进行更新"); databaseUtils.transferUpdate(jdbcInfo, jdbcVO); } }

DataBaseUtils行数太多,放到GitHub上
代码地址:数据库迁移工具:https://github.com/201811050890/database-tranfer-easy-use.git

你可能感兴趣的:(数据库信息动态迁移:Pg、Hive、MySQL迁移到MySQL,)