ClickHouse服务端需启用9004端口(MySQL兼容协议)并配置正确网络权限才能被Navicat连接;默认9000端口仅支持原生协议,且default用户默认仅允许localhost访问。
ClickHouse服务端是否监听了正确端口
navicat 默认尝试用 mysql 协议连接 clickhouse(走 9000 端口),但实际这个端口是原生 tcp 协议(clickhouse-client 用的),不是 mysql 兼容协议。真正支持 navicat 的是 9004 端口(mysql 兼容接口),前提是服务端已启用。
检查方法:登录 ClickHouse 服务器,运行 sudo netstat -tuln | grep :900,确认是否有 :9004 在 LISTEN 状态;若只有 :9000,说明 MySQL 兼容层没开。
- 编辑配置文件
/etc/clickhouse-server/config.xml或users.xml - 确保
<mysql_port>9004</mysql_port>存在且未被注释 - 重启服务:
sudo systemctl restart clickhouse-server
Navicat 连接时选错协议类型
即使端口开着,Navicat 若选“MySQL”连接类型但填了 9000,会卡在握手阶段,最终报 Connection timed out —— 因为 9000 不认 MySQL 协议包。
必须严格匹配:
- 端口填
9004→ 连接类型选MySQL - 端口填
9000→ 必须用clickhouse-client或 JDBC,Navicat 原生不支持 - 用户名密码要和
users.xml中定义一致,default用户默认无密码,但 Navicat 不允许空密码字段,得显式填default并留空密码框(部分版本需填任意字符再删掉)
防火墙或云厂商安全组拦截了 9004
本地能 telnet your-host 9004 通,不代表 Navicat 能连:中间可能有防火墙、NAT、云平台安全组策略挡着。超时错误十有八九卡在这步。
排查顺序:
- 在 ClickHouse 服务器上执行
sudo ss -tuln | grep :9004,确认监听的是0.0.0.0:9004(非127.0.0.1:9004) - 检查系统防火墙:
sudo ufw status或sudo firewall-cmd --list-ports,放行9004/tcp - 阿里云/腾讯云等控制台里查安全组规则,入方向必须放行目标 IP 段的
9004
ClickHouse 用户权限未开放远程访问
即便端口通、协议对,default 用户默认绑定 localhost,从外部 IP 连会静默拒绝,现象仍是超时(不是认证失败)。
修改方式(改 /etc/clickhouse-server/users.xml):
- 找到
<user><networks></networks></user>下的<ip>127.0.0.1</ip> - 替换成
<ip>::/0</ip>(允许所有 IPv6/IPv4)或具体 IP 段如<ip>192.168.1.0/24</ip>
- 别忘了同步改
<networks> 下其他用户(如 <code>admin)的限制
改完必须重启服务,热加载不生效。
端口、协议、防火墙、用户网络白名单——这四点漏一个,Navicat 就只会干等然后报超时。尤其注意 9004 默认不启用,且 default 用户默认只认本地请求,这两个是新手最常卡住的地方。











