MySQL 8.0 默认使用 caching_sha2_password 插件,而 MariaDB 客户端或旧版工具通常只支持 mysql_native_password,解决兼容性的最稳妥方案是在 MySQL 8.0 服务器端将用户认证插件修改为 mysql_native_password。
先说结论:MySQL 8.0 与 MariaDB 生态兼容的核心障碍是认证插件不一致,优先修改 MySQL 8.0 用户认证方式而非强行升级客户端。
- 适用场景:MariaDB 客户端连接 MySQL 8.0 服务器、旧版程序连接 MySQL 8.0、主从复制涉及不同版本。
- 先处理:通过 ALTER USER 命令将特定用户认证插件切换为 mysql_native_password。
- 再验证:使用 SELECT user, plugin FROM mysql.user 确认插件已变更且连接成功。
命令速用版
若需立即解决连接报错,可在 MySQL 8.0 服务器执行以下命令修改用户认证方式:
ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
若需全局生效于新用户,需修改配置文件 my.cnf 或 mysqld.cnf:
[mysqld] default_authentication_plugin=mysql_native_password
为什么会这样
根本原因是 MySQL 8.0 提升了安全标准,而 MariaDB 及旧客户端仍沿用传统认证机制。
MySQL 8.0.4 版本开始将默认身份验证插件从 mysql_native_password 升级为 caching_sha2_password,旨在支持 SHA-256 哈希和 RSA 加密握手以提升安全性。然而,MariaDB 客户端、旧版 JDBC 驱动、Navicat 老版本及部分 Python 库并未完全适配该新插件,导致握手阶段报错 Authentication plugin 'caching_sha2_password' cannot be loaded。这种机制差异使得即使密码正确,客户端也无法通过服务器验证。
分步处理
按以下步骤操作可确保兼容性与安全性平衡:
第一步:确认当前用户插件状态
登录 MySQL 8.0 服务器,执行查询确认报错用户的当前插件:
SELECT user, host, plugin FROM mysql.user WHERE user='your_username';
若 plugin 列显示 caching_sha2_password,则确认为兼容性问题。
第二步:修改用户认证插件
执行修改命令,将指定用户的认证方式降级为兼容性更好的 mysql_native_password:
ALTER USER 'your_username'@'your_host' IDENTIFIED WITH mysql_native_password BY 'your_password';
注意需替换实际的用户名、主机地址和密码,主机地址通常为 % 或具体 IP。
第三步:刷新权限
执行刷新命令使配置立即生效:
FLUSH PRIVILEGES;
第四步:配置文件全局设置(可选)
若希望新建用户默认兼容,编辑/etc/my.cnf 或/etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 段落添加 default_authentication_plugin=mysql_native_password,然后重启 MySQL 服务。
怎么验证是否生效
修改完成后,通过以下两种方式验证:
1. 数据库内查询验证
再次执行查询命令,确认 plugin 列已变为 mysql_native_password:
SELECT user, host, plugin FROM mysql.user WHERE user='your_username';
2. 客户端连接验证
使用原本报错的 MariaDB 客户端或应用程序重新连接,若不再出现 Authentication plugin 错误且能成功登录,即表示兼容性问题已解决。
常见坑
处理过程中需注意以下边界条件,避免操作无效:
1. 已有用户不受配置文件影响
修改配置文件 default_authentication_plugin 仅对新建用户生效,已存在的用户必须单独执行 ALTER USER 命令修改,否则仍会报错。
2. 主机地址匹配问题
MySQL 用户区分主机地址,'username'@'localhost' 与 'username'@'%' 是不同账户,需确保修改的是客户端实际连接使用的那个账户。
3. 安全性权衡
mysql_native_password 基于 SHA-1 哈希,安全性低于 caching_sha2_password,建议在内部可信网络使用,公网暴露场景需配合 SSL 加密连接。
常见问题
MariaDB 服务器能直接使用 caching_sha2_password 吗?
通常不建议,MariaDB 默认认证机制与 MySQL 8.0 不同,强行配置可能导致自身生态兼容性问题。
修改密码后为什么还是连不上?
可能修改了错误的用户主机记录,请检查 mysql.user 表中是否存在多条同名用户记录并逐一修改。
重启服务后配置失效怎么办?
检查配置文件中是否有重复的 default_authentication_plugin 设置,确保修改行未被其他配置覆盖。
主从复制报错 Authentication requires secure connection 如何解决?
这是 caching_sha2_password 在非 SSL 连接下的限制,将从库复制用户的认证插件改为 mysql_native_password 即可解决。