必须同步修改服务监听端口、客户端连接配置及防火墙/安全组规则,否则仍会连接失败;先用lsof或netstat验证9000是否真被占用,再按顺序修改config.xml中tcp_port和http_port,重启服务并放行新端口。
ClickHouse默认端口9000被占用了,连不上怎么办
直接结论:不能只改一个地方就以为能连上,必须同步调整服务监听、客户端连接、防火墙/安全组三处,否则仍会报 connection refused 或 listen failed。
怎么查端口是否真被占了(别猜,要验证)
Linux下执行:lsof -i :9000 或 netstat -tuln | grep :9000。如果返回结果非空,说明确实被占;若提示命令未找到,先装:yum install -y lsof 或 apt install -y net-tools。Windows用户可用:netstat -ano | findstr :9000。
- 注意:
clickhouse-server启动时默认同时监听三个端口:9000(TCP原生)、8123(HTTP)、9009(复制协议),任一被占都可能引发启动失败或部分功能不可用 - 常见“伪占用”:Docker容器退出后残留网络命名空间,用
docker ps -a检查是否有旧容器卡在Exited状态
修改端口号的实操步骤(以改成5566为例)
改端口不是换行数字那么简单,关键在配置生效顺序:
- 编辑主配置:
sudo nano /etc/clickhouse-server/config.xml,搜索<tcp_port>9000</tcp_port>,改为<tcp_port>5566</tcp_port></li> <li>同时检查 HTTP 端口(JDBC/HTTP客户端要用):<code><http_port>8123</http_port>
也建议一并确认,比如改成8124 - 改完必须重启服务:
sudo systemctl restart clickhouse-server;不重启=没改 - 验证是否生效:
sudo ss -tuln | grep ':5566\|:8124',有输出才说明监听成功
DataGrip/JDBC连接时怎么填参数
端口改了,客户端不跟着改就白忙——尤其容易漏掉 JDBC URL 中的端口和驱动配置:
- DataGrip 新建数据源时,
Host填服务器 IP,Port必须填新端口(如5566),不是默认9000 - JDBC 连接字符串示例:
jdbc:clickhouse://192.168.1.100:5566/default;HTTP 方式则用jdbc:clickhouse:http://192.168.1.100:8124/default - 如果启用了密码认证,删了
/etc/clickhouse-server/users.d/default-password.xml并不等于无密码——要看users.xml里<password>是否为空,空值才真正免密
最常被忽略的一点:改完端口后,云服务器的安全组或本地防火墙(如 ufw、firewalld)往往还拦着新端口,得手动放行 5566 和 8124 才算真正打通。










