Navicat报1045错误主因是协议不匹配而非密码错误:ClickHouse默认不支持MySQL协议(3306),仅响应原生TCP(9000)或HTTP(8123);需改用ODBC、HTTP或JDBC方式连接,且权限配置须通过users.xml而非SQL语句。
Navicat报1045:不是密码错,是ClickHouse根本没开MySQL协议
navicat连接clickhouse时出现 error 1045 - access denied for user 'default'@'localhost' (using password: yes),大概率不是输错了密码——而是你连的根本不是mysql服务。clickhouse默认监听的是原生tcp端口(9000)或http端口(8123),而navicat的mysql连接模式强行走的是mysql协议(3306),clickhouse不兼容该协议,自然会返回伪造的“认证失败”错误(实际是协议层拒绝握手)。
- 确认你选的是「MySQL」连接类型 —— 这是陷阱起点;ClickHouse官方只支持通过
clickhouse-client、JDBC、ODBC 或 HTTP 接口访问 - 如果你用的是社区版Navicat,它不内置ClickHouse驱动;所谓“能填Host/Port/User/Password”只是界面假象,底层仍发MySQL握手包
- 检查ClickHouse配置:
/etc/clickhouse-server/config.xml中默认没有启用<mysql_port></mysql_port>,即使手动开启,也仅限企业版或特定编译版本(如Yandex内部版),普通安装无效
真能连上ClickHouse的三种合法方式
想用Navicat图形化管理ClickHouse,必须绕过MySQL协议,走真实支持的通道:
-
ODBC方式(推荐):安装
clickhouse-odbc驱动(Windows/macOS/Linux均有),在Navicat中新建连接时选「ODBC」类型,DSN填你配置好的ClickHouse数据源名;注意驱动版本需匹配ClickHouse服务器版本(例如CH 23.8+ 推荐用 v1.1.11+) -
HTTP + Basic Auth(轻量替代):启用ClickHouse的HTTP接口(默认开),在Navicat中选「HTTP」连接类型(部分新版支持),填
http://localhost:8123,用户名/密码填ClickHouse的default用户凭据;但仅支持简单查询,无元数据浏览、建表等GUI功能 -
JDBC桥接(开发向):用DBeaver这类原生支持JDBC的工具,配合
clickhouse-jdbc驱动(Maven坐标:ru.yandex.clickhouse:clickhouse-jdbc:0.4.6);Navicat不原生支持JDBC,强行导入jar无用
为什么改密码/重置权限对ClickHouse完全无效
你在MySQL里反复执行的 GRANT、FLUSH PRIVILEGES、ALTER USER 等操作,在ClickHouse中全无对应概念。它的权限模型完全不同:
- 用户权限定义在
/etc/clickhouse-server/users.xml或users.d/下的XML文件里,靠<access_management>和<profiles>控制,不是SQL语句动态管理 - 没有
'root'@'localhost'这种MySQL式账号结构;ClickHouse只有<user>标签定义的本地用户,且默认用户叫default,不是root - 所谓“1045错误日志”如果来自ClickHouse server日志(
/var/log/clickhouse-server/clickhouse-server.err.log),实际内容往往是Code: 516. DB::Exception: Unknown packet from client—— 协议错,不是认证错
快速自检:三步判断是不是协议误用
别急着改配置或重装,先做这三件事:
- 打开终端,执行:
nc -zv localhost 3306—— 如果连接被拒绝或超时,说明根本没MySQL服务在跑;再试nc -zv localhost 9000,通了才是ClickHouse真端口 - 查Navicat连接设置页顶部:“Connection type”下拉框选的是什么?如果是
MySQL,立刻停手;必须切到ODBC或确认你用的是支持ClickHouse的商业版Navicat(如Navicat Premium 16+ with ClickHouse plugin) - 翻ClickHouse配置:
grep -r "mysql_port\|port" /etc/clickhouse-server/—— 若无输出,说明MySQL协议压根没启用,所有“改密码”动作都是对空气挥拳
协议不匹配的问题,不会因为你输对密码就解决;它卡在TCP三次握手之后、认证之前。看清协议边界,比反复试密码重要得多。


















