Mac上Homebrew装MySQL 8.3,远程连接Navicat报错‘caching_sha2_password’?保姆级修复指南
2026/6/4 5:40:55 网站建设 项目流程

Mac上Homebrew安装MySQL 8.3远程连接Navicat报错终极解决方案

当你兴奋地在Mac上通过Homebrew安装了最新版MySQL 8.3,准备用Navicat连接时,却遭遇了"caching_sha2_password"这个拦路虎。别担心,这不是你的问题,而是MySQL 8.0+版本引入的新认证机制与部分客户端工具的兼容性问题。本文将带你深入理解问题本质,并提供三种经过验证的解决方案,让你轻松搞定这个烦人的错误。

1. 问题诊断:为什么Navicat会报错?

MySQL从8.0版本开始,默认的身份验证插件从mysql_native_password改为了caching_sha2_password。这个变化带来了更高的安全性,但也导致了一些老牌数据库客户端工具(如Navicat的部分版本)无法正常连接。

关键差异对比

特性mysql_native_passwordcaching_sha2_password
引入版本MySQL 5.7及之前MySQL 8.0+
安全性较低更高
兼容性广泛支持部分客户端不支持
密码存储简单哈希SHA-256哈希
连接速度较快首次连接稍慢

当你看到这样的错误信息时:

Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(...): no such file

这明确表示Navicat无法加载MySQL 8默认的认证插件。下面我们就来解决这个问题。

2. 解决方案一:修改用户认证方式

最直接的解决方案是将特定用户的认证方式改回旧的mysql_native_password。这种方法不会影响MySQL服务的其他配置,适合只需要解决特定用户连接问题的场景。

操作步骤

  1. 首先通过终端连接到MySQL服务器:
mysql -u root -p
  1. 执行以下SQL命令修改用户认证方式(以root用户为例):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;
  1. 退出MySQL客户端:
exit;

提示:如果你需要修改的是其他用户而非root,只需将上述命令中的'root'替换为你的用户名即可。

优缺点分析

  • 优点:

    • 只影响特定用户,不影响全局配置
    • 操作简单,无需重启MySQL服务
    • 可针对不同用户设置不同认证方式
  • 缺点:

    • 需要为每个需要远程连接的用户单独设置
    • 安全性略低于caching_sha2_password

3. 解决方案二:修改MySQL配置文件

如果你希望所有新建用户都默认使用旧的认证方式,可以修改MySQL的配置文件。这种方法适合需要长期使用Navicat等工具的开发环境。

详细步骤

  1. 使用你喜欢的文本编辑器打开MySQL配置文件:
sudo nano /usr/local/etc/my.cnf

如果文件不存在,可以新建一个。

  1. 在[mysqld]部分添加以下内容:
[mysqld] default_authentication_plugin=mysql_native_password
  1. 保存文件并退出编辑器。

  2. 重启MySQL服务使配置生效:

brew services restart mysql

验证配置是否生效

  1. 连接到MySQL服务器:
mysql -u root -p
  1. 执行以下SQL查询验证默认认证插件:
SHOW VARIABLES LIKE 'default_authentication_plugin';

你应该会看到:

+-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | default_authentication_plugin | mysql_native_password | +-------------------------------+-----------------------+

4. 解决方案三:初始化数据库时选择旧版认证

如果你刚刚安装MySQL,还没有重要数据,可以在初始化数据库时直接选择使用旧版密码认证方式。这种方法最彻底,适合全新安装的场景。

操作流程

  1. 停止MySQL服务:
brew services stop mysql
  1. 删除现有数据目录(确保已备份重要数据):
rm -rf /usr/local/var/mysql
  1. 重新初始化数据库并选择旧版认证:
mysqld --initialize --user=mysql --basedir=/usr/local/opt/mysql --datadir=/usr/local/var/mysql --auth-root-authentication-method=normal
  1. 启动MySQL服务:
brew services start mysql
  1. 获取临时密码:
grep 'temporary password' /usr/local/var/mysql/*.err
  1. 使用临时密码登录并修改root密码:
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码'; FLUSH PRIVILEGES;

5. 远程连接配置与验证

解决了认证插件问题后,你可能还需要配置MySQL允许远程连接。以下是完整步骤:

  1. 确保MySQL配置文件允许远程连接:
sudo nano /usr/local/etc/my.cnf

添加或修改以下内容:

[mysqld] bind-address = 0.0.0.0
  1. 重启MySQL服务:
brew services restart mysql
  1. 登录MySQL创建远程访问用户:
mysql -u root -p
CREATE USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
  1. 在Navicat中测试连接:
    • 连接类型:MySQL
    • 主机名/IP地址:你的Mac的IP地址
    • 端口:3306
    • 用户名:remote_user
    • 密码:你设置的密码
    • 认证方式:保持默认(或选择MySQL Native Password)

常见问题排查

  • 如果连接仍然失败,检查防火墙设置:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/local/mysql/bin/mysqld
  • 确保MySQL用户有正确的host权限:
SELECT host, user FROM mysql.user;

6. 安全建议与最佳实践

虽然我们解决了连接问题,但也要注意安全性:

  1. 密码强度

    • 即使使用mysql_native_password,也要设置强密码
    • 建议包含大小写字母、数字和特殊字符,长度至少12位
  2. 最小权限原则

    • 不要给远程用户root权限
    • 只授予必要的数据库权限
-- 示例:只授予特定数据库的权限 GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'remote_user'@'%';
  1. 网络层防护

    • 考虑使用SSH隧道连接
    • 或者配置MySQL只接受特定IP的连接
  2. 定期维护

    • 定期检查并清理不需要的用户
    • 定期备份重要数据
# 简单备份命令示例 mysqldump -u root -p --all-databases > full_backup.sql
  1. 考虑升级Navicat
    • 最新版Navicat通常支持caching_sha2_password
    • 升级客户端可能是更安全的长期解决方案

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询