navicat 连接 mariadb 失败主因是 host/port 配置错误、认证插件不兼容、ssl 设置不当或字符集未统一;应改用 127.0.0.1、核对端口、降级认证插件为 mysql_native_password、按需启用 ssl、连接及服务端均设 utf8mb4。
连接失败时先确认 host 和 port 是否匹配实际服务
navicat 连不上 mariadb,八成是 host 填成了 localhost 却没意识到它在 windows/macos 上会走命名管道或 unix socket,而 navicat 默认走 tcp。真要连本地服务,host 改成 127.0.0.1 更可靠;port 则必须和 mariadb 配置里的 port 一致(默认 3306,但有些 docker 镜像或一键安装包会改成 3307 或其他)。
常见错误现象:Connection refused、Can't connect to MySQL server,不是密码错,是根本没连上端口。
- 检查 MariaDB 是否真正监听 TCP:运行
sudo netstat -tuln | grep :3306(Linux/macOS)或netstat -ano | findstr :3306(Windows),看是否有LISTEN状态 - Docker 环境下注意端口映射:启动容器时是否加了
-p 3306:3306?宿主机连127.0.0.1:3306,容器内连127.0.0.1:3306是两回事 - 云服务器(如阿里云、腾讯云)务必检查安全组——
3306端口是否放行入方向流量
Authentication plugin 'caching_sha2_password' cannot be loaded 错误怎么绕过
这是 MariaDB 10.4+(尤其是从 MySQL 8.0 兼容层迁移来的用户)最常遇到的报错。Navicat 旧版本(≤16.x)默认不支持 MySQL 8.0 引入的 caching_sha2_password 认证插件,而某些 MariaDB 安装包或配置会默认启用它。
解决思路不是升级 Navicat(虽然 17+ 支持了),而是让用户账号降级用兼容插件:
- 用 root 登进 MariaDB 执行:
ALTER USER 'your_user'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_password'); - 或者建新用户时指定:
CREATE USER 'navi_user'@'%' IDENTIFIED VIA mysql_native_password BY 'pass123'; - 执行后别忘了
FLUSH PRIVILEGES;
注意:mysql_native_password 是兼容性最强的,但安全性略低;如果必须用 caching_sha2_password,就只能升 Navicat 到 17.0 及以上,并确保勾选“使用 SSL”或在高级里手动指定认证插件(部分版本支持)。
SSL 设置填不填?什么时候必须开 Require SSL
本地开发或内网环境,SSL/TLS 不是必须项;但只要数据库暴露在公网、或公司策略要求加密传输,就必须配。Navicat 的 SSL 设置位置藏得有点深:连接属性 → “SSH/SSL” 页签 → 勾选“使用 SSL” → 再选“强制 SSL”或“验证 CA”。
关键点在于服务端是否真开了 SSL 支持:
- 查 MariaDB 是否启用了 SSL:
SHOW VARIABLES LIKE '%ssl%';,确认have_ssl是YES - 若要强制客户端走 SSL,需在用户权限里加:
REQUIRE SSL,例如:GRANT ALL ON *.* TO 'user'@'%' REQUIRE SSL; - Navicat 勾了“强制 SSL”但服务端没配证书,连接会直接失败,报错类似
SSL connection error: protocol version mismatch
字符集乱码?重点盯死三个地方的 charset
中文显示问号、插入变空格、排序异常……大概率是字符集没对齐。MariaDB 的字符集链条有三环:客户端声明、连接层、表/列定义。Navicat 只控制第一环。
实操建议:
- 连接设置里,“高级”页签下找到
Initial Charset,设为utf8mb4(不是utf8!后者在 MariaDB 中是阉割版,不支持 emoji) - 确保 MariaDB 配置文件(
/etc/my.cnf或C:\Program Files\MariaDB\data\my.ini)中有:character-set-server = utf8mb4和collation-server = utf8mb4_unicode_ci - 已有库/表若乱码,不能只改连接设置,还得
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;,再逐个改表和字段
最容易被忽略的是:Navicat 新建连接时,“高级”页签默认不展开,Initial Charset 就卡在默认的 latin1 上,一连十年都是乱码,谁也想不到点一下展开看看。











