如何设置 OB 的 MySQL 连接协议兼容性到 5.7.25 ?

近期 OB 开源版发布了 3.1.1 ,里面都提到一个新特性:

适配支持 MySQL 5.7 驱动协议,支持 5.7 新增的会话变量,可以推高 OceanBase 的 MySQL 兼容版本,避免企业内部安全审计问题。

这里解释一下这个用法。

  • 当前现象

当前命令行下用 obclient 或者 mysql 连接 OceanBase MySQL 租户,提示如下:

[admin@obce00 ~]$ obclient -h172.20.249.54 -uroot@obmysql#obce-3zones -P2883 -p******** -c -A oceanbase Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 21221 Server version: 5.6.25 OceanBase 3.1.1 (r1-ad3164d5e72df996e11f9ab1738f577c3b9ff2ce) (Built Oct 12 2021 12:41:21) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. MySQL [oceanbase]> Bye

其中提到了 服务端的版本是 5.6.25 。这个在有些企业内部影响是内部安全审计会认为 MySQL 5.6 有很多漏洞 在 OB 上也有。实际上 OB 只是兼容 MySQL 5.6或5.7 的连接协议和 SQL 语法,SQL内部执行原理跟 MySQL 有很大的不同(OB 有自己自研的 SQL 引擎、事务引擎和存储引擎),所以安全漏洞这个是不会有的,但是这个扫描很令人困扰。OBPROXY 2.0 以后的版本也已经实现对 MySQL 5.7 的连接协议的兼容。所以,在很多客户场景,我们可以推高这个 MySQL 连接的兼容性版本。

  • 设置 OB 的 MySQL 连接协议兼容性版本方法

这个连接协议兼容性版本的提升主要是 OBPROXY 功能的提升(OBPROXY 2.0以后的版本)。 **OBSERVER 自身是早就兼容了 MySQL 5.7 的一些特性。**这个版本的提示是 OBPROXY 内部的参数变量。首先要使用 OBPROXY 的管理员用户(root@proxysys) 登录 OBPROXY,其密码在 OBD 安装 OBPROXY 的配置文件中,可以后期修改。

[admin@obce00 ~]$ obclient -h 172.20.249.54 -uroot@proxysys -P2883 -p******* -c -A Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 21223 Server version: 5.6.25 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. MySQL [(none)]> show proxyconfig like ‘mysql_version’; ±--------------±-------±-------------------------------------------------------------------------------------------------------------------------±------------±--------------+ | name | value | info | need_reboot | visible_level | ±--------------±-------±-------------------------------------------------------------------------------------------------------------------------±------------±--------------+ | mysql_version | 5.6.25 | returned version for mysql mode, default value is 5.6.25. If set, proxy will send new version when user connect to proxy | false | USER | ±--------------±-------±-------------------------------------------------------------------------------------------------------------------------±------------±--------------+ 1 row in set (0.001 sec MySQL [(none)]> alter proxyconfig set mysql_version=‘5.7.25’; Query OK, 0 rows affected (0.001 sec) MySQL [(none)]> show proxyconfig like ‘mysql_version’; ±--------------±-------±-------------------------------------------------------------------------------------------------------------------------±------------±--------------+ | name | value | info | need_reboot | visible_level | ±--------------±-------±-------------------------------------------------------------------------------------------------------------------------±------------±--------------+ | mysql_version | 5.7.25 | returned version for mysql mode, default value is 5.6.25. If set, proxy will send new version when user connect to proxy | false | USER | ±--------------±-------±-------------------------------------------------------------------------------------------------------------------------±------------±--------------+ 1 row in set (0.000 sec) MySQL [(none)]>

再次登录业务租户,就可以看到 Server 版本发生变化。这个方法也适用于 OB 企业版,不过企业版可以通过 OCP 修改 OBPROXY 参数。

注意:这个参数值不是任意修改的,只有 OBSERVER 和 OBPROXY 确实兼容了 MySQL 那个版本的特性才可以提升这个参数值。

欢迎留言讨论。

你好我使用了同样的方法更改mysql版本为5.7.25,但是phpmyadmin还是提示要升级版本到5.5.0?