navicat连接mariadb 10.6失败主因是认证插件不匹配(如caching_sha2_password或unix_socket),需将用户插件改为mysql_native_password,并确保bind-address设为0.0.0.0、防火墙放行3306、云平台开启白名单及公网地址。
navicat 连接 mariadb 10.6 失败,大概率不是版本不兼容,而是默认认证插件或协议细节不匹配——mariadb 10.4+ 默认用 unix_socket(本地)或 caching_sha2_password(远程),而 navicat 旧版驱动只认 mysql_native_password;只要改插件、不换驱动,基本就能连上。
确认 MariaDB 10.6 用户的认证插件类型
连不上时先别急着调 Navicat,直接登录服务器查用户实际用的什么插件:
- 执行
SELECT User, Host, plugin FROM mysql.user WHERE User = 'your_user'; - 如果
plugin是unix_socket或caching_sha2_password,Navicat 就可能报Access denied或Client does not support authentication protocol -
unix_socket只允许本地 socket 登录,远程 IP 必须换插件;caching_sha2_password虽支持远程,但 Navicat ≤15.x 默认不加载该插件
强制切换为 mysql_native_password 插件
在 MariaDB 中对目标用户重设认证方式(需有 SUPER 权限):
- 运行:
ALTER USER 'your_user'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_password'); - 或更兼容的写法:
SET PASSWORD FOR 'your_user'@'%' = PASSWORD('your_password');(MariaDB 10.6 仍支持) - 立刻生效:
FLUSH PRIVILEGES; - 注意:不要对
root@localhost改,它依赖unix_socket;专为 Navicat 创建一个远程专用账号更安全,比如'naviuser'@'192.168.1.%'
Navicat 连接设置中关键参数微调
即使插件改了,Navicat 里几个选项没对齐也会失败:
- 连接类型选
MySQL(不是MariaDB—— Navicat 没独立 MariaDB 驱动,靠 MySQL 协议兼容) - “高级”页勾选
Use SSL前,必须确认 MariaDB 实例已启用 SSL(查SHOW VARIABLES LIKE 'have_ssl';),否则连不上 - “高级”页填上
Default database,否则左侧数据库列表为空(Navicat 不自动加载 schema) - 字符集显式设为
utf8mb4,避免中文乱码或建表报错(尤其用到 emoji 或四字节 UTF-8 时)
防火墙与 bind-address 常被忽略的硬性条件
插件和 Navicat 设置全对了还连不上?卡在这两个底层配置:
-
bind-address必须不是127.0.0.1:编辑/etc/mysql/mariadb.conf.d/50-server.cnf,设为0.0.0.0或具体局域网 IP,然后sudo systemctl restart mariadb - Linux 防火墙必须放行 3306:
sudo ufw allow 3306(Ubuntu)或sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reload(CentOS) - 云厂商(如阿里云、腾讯云)还要额外开白名单 + 公网地址,控制台里缺一不可;
0.0.0.0/0可临时测试,但上线前务必收紧
真正卡住人的从来不是 MariaDB 10.6 新特性,而是 plugin 类型、bind-address 和云平台白名单这三处配置互相咬死。调其中一个,往往要同步动另外两个才生效。











