openGauss

开源数据库

openGauss社区官网

开源社区

**Mysql协议兼容特性入门

1.简介

为了进一步减少Mysql程序迁移到opengauss的工作量。openGauss 5.1.0 引入了Mysql协议兼容特性,本文对该特性限制及使用方式做个简单介绍。

2.特性实现简介

根据协议扩展接口定义,实现支持mysql协议的扩展dolphin_protocol_config;通过在dolphin插件的_PG_init中判断是否创建监听端口fd,同时映射该fd至dolphin_protocol_config中; 这样通过监听fd建立连接的网络请求,将会按照mysql数据库协议实现的方式进行处理。

3.使用限制

  1. Mysql客户端版本号需要是5.7.X
  2. Mysql-jdbc driver版本需要是5.1.47

4.使用方式

1.postgres.conf中增加协议兼容插件配置

enable_dolphin_proto=on
dolphin_server_port=3307
dolphin.default_database_name = 'mysql_test'

2.gsql连接openGauss,创建B库,设置登录用户名密码

openGauss=# create database mysql_test dbcompatibility='B';
CREATE DATABASE
openGauss=# \c mysql_test
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "mysql_test" as user "zhoujing".
mysql_test=# create schema mysql_test;
CREATE SCHEMA
mysql_test=# create user adminusr sysadmin password 'Cmcc@123!';
CREATE ROLE
mysql_test=# select set_native_password('adminusr','Cmcc@123!');
           set_native_password            
------------------------------------------
 324e9019e7e4181b70321f5844c4c761cd1ae725
(1 row)

3.使用mysql-client连接openGauss的Mysql协议兼容端口。在其中可以访问到磐维数据库mysql_test库(B库),中mysql_test schema下的表。注意mysql中的database对应openGauss中的schema

mysql -h***.***.***.*** -uadminusr -pCmcc@123! -P3307 -Dmysql_test

4.使用jdbc方式连接,连接串类似如下形式:

String URL = "jdbc:mysql://ip-address:dolphin_server_port/mysql_database?&useSSL=false";

示例代码如下:

    public static Connection GetConnection(String username, String passwd) {
        String driver = "com.mysql.jdbc.Driver";
        String sourceURL = "jdbc:mysql://localhost:3307/mysql_test?&useSSL=false";
        Connection conn = null;
         try {
            //创建数据库连接。
            conn = DriverManager.getConnection(sourceURL, username, passwd);
            System.out.println("Connection succeed!");
        } catch (Exception e) {
            e.printStackTrace();
         }
        return conn;
    }

5.常见问题定位方法

当出现连接不上问题时可以从以下几方面定位:

  1. 版本是否正确:jdbc驱动目前仅支持5.1.47, 客户端目前仅支持5.7.X
  2. 端口是否正常:可以通过netstat -antp命令查看端口状态,正常状态如下:
[root@d202a05cb1c3 ~]# netstat -antp|grep 3307
tcp        0      0 ***.***.***.***:3307            ***.***.***.***:*               LISTEN      5784/gaussdb        
tcp6       0      0 :::3307                 :::*                    LISTEN      5784/gaussdb   

若端口未启动,可检查是否存在端口冲突,postgres.conf参数是否配置生效。

3.是否已经为登录用户设置了密码

select set_native_password('adminusr','Cmcc@123!');