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.使用限制
- Mysql客户端版本号需要是5.7.X
- 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.常见问题定位方法
当出现连接不上问题时可以从以下几方面定位:
- 版本是否正确:jdbc驱动目前仅支持5.1.47, 客户端目前仅支持5.7.X
- 端口是否正常:可以通过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!');