首批通过分布式安全可靠测评,为关键业务系统打造
专有云 tunnel 打洞方式放开 2881 端口,命令行登录 OBServer 报错 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 11 的原因和解决方法
更新时间:2026-06-03 03:01
问题现象
通过 tunnel(192.168.xxx.xxx 为 tunnel ip 地址)打洞方式,将其 2881 端口映射到 OBServer 主机 2881 端口。在客户端命令行方式登录时,报错如下。
# obclient -h192.168.xxx.xxx -uroot@sys -P2881 -A -c
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 11
关键日志报错信息如下。
observer.log.20240814182008912:[2024-08-14 18:14:02.592981] INFO [RPC.OBMYSQL] init (obsm_conn_callback.cpp:141) [11953][sql_nio9][T0][Y0-0000000000000000-0-0] [lt=13] sm conn init succ(conn.sessid_=3221887793, sess.client_addr_="172.xxx.xxx.xxx:41xx")
observer.log.20240814182008912:[2024-08-14 18:14:02.595896] INFO [LIB] get_virtual_addr (ob_vtoa_util.cpp:107) [11953][sql_nio9][T0][Y0-0000000000000000-0-0] [lt=13] SLB connect(protocol=6, fd=784, vid=3549824, vaddr="192.168.xxx.xxx:2881", caddr="172.xxx.xxx.xxx:41xx", daddr="10.xx.xx.xx:2881")
observer.log.20240814182008912:[2024-08-14 18:14:02.595908] WARN get_user_tenant (ob_srv_deliver.cpp:206) [11953][sql_nio9][T0][Y0-0000000000000000-0-0] [lt=12][errcode=-4147] Invalid config(msg="connect from LB, but tenant_name is not empty")
问题原因
通过 tunnel 打洞方式做端口映射,类似于一个私有 LB 场景,该场景与 OceanBase 公有云场景支持 LB 连接的功能相冲突,客户端直连 OBServer tunnel IP 地址 2881 的请求,被误判为公有云主地址方式连接,不能再走正常登陆流程,同时连接串包含了租户名,导致登录错误。
问题的风险及影响
连接报错。
适用版本
OceanBase 数据库 V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722) ~ V4.2.1 BP8(oceanbase-4.2.1.8-108000052024072217)和 V4.3.3 GA(oceanbase-4.3.3.0-100000362024093001)版本。
解决方法及规避方式
集群新增 _endpoint_tenant_mapping 配置项,connection vid 来自网络配置,也可以在初次连接报错后从 observer.log 日志里看到。
alter system set _endpoint_tenant_mapping = '[{"vid": xxxxx, "vip": "192.168.xxx.xxx", "vport": 2881, "cluster_name": "<cluster_name>", "tenant_name": "<tenant_name>"}]';
该配置仅对 192.168.xxx.xxx IP 地址连接请求生效,生效后后续登陆 OBServer,不再需要填写租户名。