navicat 15 连不上 mariadb 10.x 主因是认证插件不兼容(caching_sha2_password)、root 远程权限未授权、bind-address 限制为 127.0.0.1、字符集未显式设为 utf8mb4 或 ssl 配置错位,而非版本不兼容。
navicat 15 连不上 mariadb 10.x,八成不是版本不兼容,而是认证插件、权限配置或网络层没对齐——它本身支持 mariadb 10.x,但默认行为和新版本默认策略存在错位。
Authentication plugin 'caching_sha2_password' cannot be loaded 错误
这是 Navicat 15(≤15.0.30)连接 MariaDB 10.4+ 或某些启用了 MySQL 8.0 兼容模式的实例时最典型的报错。MariaDB 默认启用 caching_sha2_password 插件,而 Navicat 15 不原生支持该插件。
- 不要升级 MariaDB 配置去“适配”Navicat;应降级用户认证方式
- 用 root 登进 MariaDB 执行:
ALTER USER 'your_user'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_pass'); - 执行后必须运行
FLUSH PRIVILEGES;,否则不生效 - 若新建用户,直接用:
CREATE USER 'navi_user'@'%' IDENTIFIED VIA mysql_native_password BY 'pass123'; - 注意:
mysql_native_password兼容性最好,但不支持 RSA 密钥交换,敏感环境慎用
root 用户无法远程连接(尤其群晖、Docker、Kali 等场景)
MariaDB 10.x 默认禁用 root 远程访问,且绑定在 127.0.0.1,Navicat 从外部连会直接失败,错误常表现为 2003 - Can't connect to MySQL server 或 2013 - Lost connection。
- 先确认 MariaDB 是否监听 TCP:Linux/macOS 上跑
sudo netstat -tuln | grep :3306,Windows 上用netstat -ano | findstr :3306,看是否有LISTEN - 修改配置文件(如
/etc/mysql/mariadb.conf.d/50-server.cnf),把bind-address = 127.0.0.1改成bind-address = 0.0.0.0,然后重启服务:sudo systemctl restart mariadb - 授权语句不能只写
UPDATE user SET host='%' WHERE user='root'(会触发主键冲突),必须用GRANT:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_pass' WITH GRANT OPTION; - 群晖用户需先开 SSH,
sudo -i切 root,再进/usr/local/mariadb10/bin/目录执行./mysql -uroot -p,否则连本地 mysql 命令都进不去
中文乱码 & 字符集 fallback 失效
Navicat 15 默认建连用的是 latin1 或旧版 utf8(即 utf8mb3),而 MariaDB 10.x 新建库/表默认是 utf8mb4。即使服务端全配了 utf8mb4,Navicat 不显式声明,照样显示 ? 或方块。
- 不要依赖
init_connect = 'SET NAMES utf8mb4'—— 它对root用户无效,Navicat 用 root 连就绕过去了 - 在 Navicat 连接设置里点「高级」→「初始化命令」,填入:
SET NAMES utf8mb4; - 或者勾选「使用 MySQL 字符集」并手动设为
utf8mb4(不是utf8) - 验证当前连接编码:连上后执行
SELECT @@character_set_client, @@character_set_connection, @@character_set_results;,三个都得是utf8mb4 - 用 Navicat 的「数据传输」功能时,向导里务必勾选「保持字符集」,否则它会按自身默认编码重建目标表
SSL 启用后连接卡在 waiting for initial communication packet
当 MariaDB 配置了 require_secure_transport = ON 或强制 SSL 时,Navicat 15 若未开启 SSL 或证书路径不对,就会卡在握手初期,报错类似 2013 - Lost connection to MySQL server at 'waiting for initial communication packet'。
- 先确认 MariaDB 是否真启用了强制 SSL:
SELECT @@require_secure_transport;返回ON就是 - Navicat 中必须勾选「使用 SSL」,且「SSL 模式」选
Required(不是Preferred) - 如果用了自签名证书,需在 Navicat 「SSL 设置」里填入正确的 CA 证书路径(
ca.pem),不能只填 client key/cert - 更简单方案:临时关闭强制 SSL(仅测试用)——在 my.cnf 加
require_secure_transport = OFF,然后sudo systemctl restart mariadb - 注意:Docker 启动时若挂载了 SSL 证书但没配
--ssl-mode=REQUIRED,客户端行为可能不一致
真正麻烦的从来不是 Navicat 15 和 MariaDB 10.x 的“版本不兼容”,而是 MariaDB 10.x 默认变得更安全、更严格,而 Navicat 15 还带着旧习惯去连——比如默认走 localhost(触发 socket)、默认不声明字符集、默认不处理新认证插件。每一步错位都会导致连接中断,且错误信息往往不指向真实原因。











