oceanbase连接超时90%是网络链路不通所致,需确认obproxy监听2883端口、防火墙放行、docker正确映射、navicat中host填服务器真实ip而非localhost、用户名格式为username@tenant_name#cluster_name,并检查obproxy日志是否有拒绝连接记录。
确认 oceanbase 服务端监听端口是否真正开放
navicat 连接超时,90% 的情况不是 navicat 或 oceanbase 配置错,而是网络链路根本没通到 obproxy 或 observer 进程。oceanbase 默认用 2883(mysql 协议)或 2881(oracle 协议),但实际监听端口取决于部署方式——单机版可能只开 2883,集群版通常走 obproxy 的 2883,而 observer 本身监听的是 2881(内部通信)和 2882(rpc),不直接对外。
实操建议:
- 登录 OceanBase 服务器,执行
netstat -tuln | grep :2883,确认有LISTEN状态且绑定在0.0.0.0或具体 IP,而非127.0.0.1 - 检查
obproxy是否运行:ps -ef | grep obproxy;若未启动,需先./bin/obproxy -c conf/obproxy.conf - 防火墙常被忽略:CentOS 7+ 默认启用
firewalld,需放行2883:firewall-cmd --add-port=2883/tcp --permanent && firewall-cmd --reload - Docker 部署时,必须加
-p 2883:2883,且docker run中不能漏掉--network host或正确配置 bridge 网络别名
Navicat 连接参数中 host 和 port 必须匹配 obproxy 实际暴露地址
很多人填了正确的端口,却把 host 写成 localhost 或 127.0.0.1——这会让 Navicat 去连本地的回环,而不是目标服务器上的 obproxy。尤其在 Mac 或 Windows 上用 Navicat 连远端 OceanBase,host 必须是服务器真实 IP 或可解析的域名,不能是“本机”概念。
实操建议:
- 在 Navicat 新建连接时,
Host栏填服务器外网 IP(如192.168.10.5或云厂商分配的公网 IP),不是localhost - 确认
Port是obproxy监听的端口(默认2883),不是observer的2881;直连 observer 不推荐,且需开启 MySQL 兼容模式 - 如果服务器在内网,而你在公司办公网,中间有跳板机或 NAT,需确认该 IP + 端口从你的电脑能
telnet 192.168.10.5 2883通——不通就不是 OceanBase 的问题,是网络策略卡住
检查 obproxy 日志里有没有 client connect rejected 或 auth failed
超时错误表象下,有时其实是 obproxy 拒绝了连接,比如认证失败、租户未激活、或用户权限不足,但它不返回明确错误,只静默丢包,导致 Navicat 卡在“connecting…”后超时。
实操建议:
- 查
obproxy日志:tail -f log/obproxy.log,搜索关键词connect、reject、auth;看到类似client connect rejected: user 'root'@'192.168.10.100' is not allowed就说明权限或租户问题 - OceanBase 租户隔离严格:Navicat 登录时
Username必须带租户名,格式为username@tenant_name#cluster_name,例如root@sys#obdemo;漏掉@sys或写错cluster_name都会静默失败 - 确保该用户在对应租户下已授权:
GRANT ALL ON *.* TO 'your_user'@'%';,且FLUSH PRIVILEGES;(注意:OceanBase 的FLUSH语法与 MySQL 不同,需用ALTER SYSTEM刷新)
客户端连接池或 DNS 缓存引发的间歇性超时
有些超时不是每次都发生,而是隔几分钟才连得上——大概率是 DNS 解析慢或缓存失效,尤其当 host 填的是域名而非 IP 时。OceanBase 对首次建连耗时敏感,DNS 超过 3 秒就会触发 Navicat 默认的 10 秒连接超时。
实操建议:
- Navicat 连接设置里关掉
Use DNS SRV record(如果开着),这个选项对 OceanBase 无意义,反而增加解析环节 - 把
Host改成 IP 地址,绕过 DNS;或者在本地/etc/hosts(Mac/Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)里静态绑定域名 - Navicat 自身有连接池机制,偶尔会复用异常连接句柄;遇到偶发超时,先点右键连接 →
Disconnect,再Connect,比重启软件更快
端口通、地址对、用户格式准、日志没拒绝记录——这时候再看 Navicat 的连接超时时间是不是设得太短。默认 10 秒够用,但如果跨公网或高延迟网络,可以手动调到 30 秒。真正的坑往往不在 OceanBase 侧,而在你和它之间那层看不见的网络策略或 DNS 路径上。










