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 并带 'root'@'localhost',或直接报 Authentication plugin 'caching_sha2_password' cannot be loaded,基本可锁定是认证插件不兼容,不是密码输错。MySQL 8.0 默认用 caching_sha2_password,而 Navicat 15 以下版本(尤其是 12、11)根本不认识它。
执行 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;,否则修改不加载Windows 下 localhost 会优先尝试命名管道或共享内存,而 MySQL 服务默认不启用这些通道;填 127.0.0.1 强制走 TCP,路径确定,匹配 'root'@'127.0.0.1' 才能命中。
127.0.0.1(不是 localhost)3306 是默认,XAMPP/MAMP 可能是 3307)单条 ALTER USER 治标,重启容器后新用户仍会继承 caching_sha2_password。一劳永逸的做法是改全局默认插件。
/etc/my.cnf,在 [mysqld] 下加一行:default_authentication_plugin=mysql_native_password
C:ProgramDataMySQLMySQL Server 8.0my.ini,同样加该配置my.cnf 挂载到 /etc/mysql/conf.d/ 目录下注意:default_authentication_plugin 只影响新创建的用户,已有用户仍需单独执行 ALTER USER 切换插件——这点最容易漏掉。