怎样解决MySQL 8.0中Navicat无法连接的权限协议问题?

作者:袖梨 2026-07-04
ERROR 1045 或 2059 错误主因是 MySQL 8.0 默认认证插件 caching_sha2_password 与旧版 Navicat 不兼容;需查用户 host 确认匹配项,为 'root'@'localhost' 和 'root'@'127.0.0.1' 同时执行 ALTER USER 切换为 mysql_native_password,FLUSH PRIVILEGES,并在 Navicat 中连接地址填 127.0.0.1 而非 localhost。

Navicat 报 ERROR 1045 或 ERROR 2059 怎么快速判断原因

先别急着改配置,打开 Navicat 连接弹窗里的错误信息——如果出现 ERROR 1045 并带 'root'@'localhost',或直接报 Authentication plugin 'caching_sha2_password' cannot be loaded,基本可锁定是认证插件不兼容,不是密码输错。MySQL 8.0 默认用 caching_sha2_password,而 Navicat 15 以下版本(尤其是 12、11)根本不认识它。

ALTER USER 必须指定 host 才生效

执行 ALTER USER 时只写 'root'@'localhost' 是不够的——Navicat 默认走 TCP 连接,哪怕你填的是 localhost,MySQL 实际匹配的可能是 'root'@'127.0.0.1''root'@'%',而这两条记录很可能不存在或插件仍是旧的。

  • 先查真实用户列表:SELECT user, host FROM mysql.user WHERE user = 'root';
  • 如果只看到 root + localhost,就补一条:CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的密码';
  • 再统一插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的密码';
  • 最后必须执行:FLUSH PRIVILEGES;,否则修改不加载

Navicat 连接设置里填 127.0.0.1,别填 localhost

Windows 下 localhost 会优先尝试命名管道或共享内存,而 MySQL 服务默认不启用这些通道;填 127.0.0.1 强制走 TCP,路径确定,匹配 'root'@'127.0.0.1' 才能命中。

  • Navicat 新建连接 → “主机名或 IP 地址”栏输入:127.0.0.1(不是 localhost
  • 端口确认是实际监听值(3306 是默认,XAMPP/MAMP 可能是 3307
  • 密码字段必须真实填写,大小写敏感,不能留空

Docker 或长期部署建议改 my.cnf

单条 ALTER USER 治标,重启容器后新用户仍会继承 caching_sha2_password。一劳永逸的做法是改全局默认插件。

  • Linux/macOS:编辑 /etc/my.cnf,在 [mysqld] 下加一行:default_authentication_plugin=mysql_native_password
  • Windows:修改 C:ProgramDataMySQLMySQL Server 8.0my.ini,同样加该配置
  • Docker:把自定义 my.cnf 挂载到 /etc/mysql/conf.d/ 目录下
  • 改完必须重启 MySQL 服务,否则不生效

注意:default_authentication_plugin 只影响新创建的用户,已有用户仍需单独执行 ALTER USER 切换插件——这点最容易漏掉。

相关文章

精彩推荐