利用JDBC进行mysql到opengauss的数据迁移

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 利用JDBC进行mysql到opengauss的数据迁移

记录一下数据库实验中比较难的一个,实在是比较费脑筋。


任务:将一种数据类型从mysql上迁移到opengauss上 我在这里以视图为例


既然用JDBC连接,那么要导入mysql和opengauss的驱动


如下图所示,去官网上下载就可以了


下面为opengauss的连接 需要改的就是下面的ip地址(可以在你的数据库上用ifconfig查看),还有连接的具体数据库,还有你用户的名字和密码都需要根据自己的来改

 //gauss connect
    static final String JDBC_DRIVER = "org.postgresql.Driver";
    static final String gauss_URL = "jdbc:postgresql://ip address/DB";
 static final String gauss_user = "name";
    static final String gauss_pass = "password";

下面为mysql的连接, 同样一些基本信息需要填你自己的,值得一提的是最后一个驱动如果你的mysql是8.0以上则要加中间那个cj


static final String databaseName = "lab4";//数据库名
    static final String mysql_user = "";//使用管理员账号启动
    static final String mysql_pwd = " ";//数据库密码
    static final String mysql_URL = "jdbc:mysql://localhost:3306/" + databaseName + "?useSSL=false&serverTimezone=UTC";
    static final String mysql_DRIVER = "com.mysql.cj.jdbc.Driver";

下面为代码的关键 包括sql语句的定义 sql语句的执行,尤其要注意 思想是先从opengauss里提取出来数据,然后作为mysql语句的执行内容,一般会有字符串和变量不匹配的问题,要进行一下转义


 String sql;//提取
                sql = "SELECT table_name,table_schema,view_definition,check_option,is_updatable FROM information_schema.views where table_schema=\'lab4\' ;";
                String g_sql;
                g_sql="select * from test";
                ResultSet rs=gauss_stmt.executeQuery(g_sql);
                ResultSet resultset = mysql_stmt.executeQuery(sql);
                while (resultset.next()) {
                    String view_def = resultset.getString("VIEW_DEFINITION");
  view_def=view_def.replace("`","");
String a=" create view vi as %s;";
     String b=String.format(a,view_def);
 System.out.println(b);
    gauss_stmt.execute(b);

下面为完整代码


import java.sql.*;
public class lab4 {
    //gauss connect
    static final String JDBC_DRIVER = "org.postgresql.Driver";
    static final String gauss_URL = "jdbc:postgresql://192.168.176.154:5432/demo";
    // 数据库的用户名与密码,需要根据自己的设置
    static final String gauss_user = "dbuser";
    static final String gauss_pass = "Gauss#3demo";
    //mysql connect
    static final String databaseName = "lab4";//数据库名
    static final String mysql_user = "root";//使用管理员账号启动
    static final String mysql_pwd = "ljl050505 ";//数据库密码
    static final String mysql_URL = "jdbc:mysql://localhost:3306/" + databaseName + "?useSSL=false&serverTimezone=UTC";
    static final String mysql_DRIVER = "com.mysql.cj.jdbc.Driver";
        public static void main(String[]args)throws Exception {
            Connection mysql_conn = null;
            Statement mysql_stmt = null;
            Connection gauss_conn = null;
            Statement gauss_stmt = null;
            try {
                Class.forName(mysql_DRIVER);
                System.out.println("connect mysql DB");
                mysql_conn = DriverManager.getConnection(mysql_URL, mysql_user, mysql_pwd);
                mysql_stmt = mysql_conn.createStatement();
                Class.forName(JDBC_DRIVER);
                System.out.println("connect opengauss");
                gauss_conn = DriverManager.getConnection(gauss_URL, gauss_user, gauss_pass);
                gauss_stmt=gauss_conn.createStatement();
                String sql;//提取
                sql = "SELECT table_name,table_schema,view_definition,check_option,is_updatable FROM information_schema.views where table_schema=\'lab4\' ;";
                String g_sql;
                g_sql="select * from test";
                ResultSet rs=gauss_stmt.executeQuery(g_sql);
                ResultSet resultset = mysql_stmt.executeQuery(sql);
                while (resultset.next()) {
                    String view_def = resultset.getString("VIEW_DEFINITION");
  view_def=view_def.replace("`","");
String a=" create view vi as %s;";
     String b=String.format(a,view_def);
 System.out.println(b);
    gauss_stmt.execute(b);
                }
while(rs.next()){
 String g_name=rs.getString("name");
                    String g_location=rs.getString("location");
                    System.out.println("name"+g_name);
                    System.out.println("location"+g_location);
}
                resultset.close();
                mysql_stmt.close();
                mysql_conn.close();
                gauss_stmt.close();
                gauss_conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (Exception e1) {
                e1.printStackTrace();
            } finally {
                try {
                    if (mysql_stmt != null) mysql_stmt.close();
                } catch (SQLException e2) {
                }
            }
            try {
                if (mysql_conn != null) mysql_conn.close();
            } catch (SQLException e3) {
                e3.printStackTrace();
            }
            System.out.println("goodbye");
        }
    }
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
401 1
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
77 3
|
2月前
|
关系型数据库 MySQL API
MySQL 历史数据迁移到 Elasticsearch
MySQL 历史数据迁移到 Elasticsearch
103 4
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
103 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
46 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
57 0
|
4月前
|
前端开发 关系型数据库 MySQL
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
这篇文章讨论了`com.mysql.jdbc.Driver`和`com.mysql.cj.jdbc.Driver`两个MySQL驱动类的区别,指出`com.mysql.jdbc.Driver`适用于MySQL 5的`mysql-connector-java`版本,而`com.mysql.cj.jdbc.Driver`适用于MySQL 6及以上版本的`mysql-connector-java`。文章还提到了在实际使用中如何根据MySQL版本选择合适的驱动类。
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
|
4月前
|
关系型数据库 MySQL Java
【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
181 0
|
7月前
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之在使用JDBC连接MySQL数据库时遇到报错,识别不到jdbc了,怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
62 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)