You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用mysql2连接MySQL时出现root@localhost访问拒绝错误求助

解决MySQL 'root'@'localhost' 权限拒绝问题

针对你遇到的ER_ACCESS_DENIED_ERROR错误,以下是逐一排查和解决的步骤:

1. 验证密码正确性

直接通过MySQL客户端测试登录,确认代码中的密码是否匹配:

mysql -u root -p

输入代码里的password,如果登录失败,说明密码错误。要么修正代码中的密码,要么重置MySQL root密码。

2. 检查root用户的主机权限

MySQL用户权限是user@host的组合形式,可能root用户未被授权从localhost登录:

  • 登录MySQL后执行以下命令查看现有用户:
    SELECT user, host FROM mysql.user;
    
  • 如果不存在root@localhost,执行以下命令创建并赋予权限:
    CREATE USER 'root'@'localhost' IDENTIFIED BY '你的密码';
    GRANT ALL PRIVILEGES ON notes_app.* TO 'root'@'localhost';
    FLUSH PRIVILEGES;
    
  • 另一种情况:若root仅允许127.0.0.1登录,可将代码中的host改为127.0.0.1尝试连接。

3. 确认目标数据库存在

检查notes_app数据库是否已创建:
登录MySQL后执行:

SHOW DATABASES;

如果不存在,先创建数据库:

CREATE DATABASE notes_app;

4. 验证用户对数据库的权限

确保root@localhost拥有notes_app数据库的访问权限:

SHOW GRANTS FOR 'root'@'localhost';

如果缺少权限,执行以下命令赋予:

GRANT SELECT ON notes_app.* TO 'root'@'localhost'; -- 或者用ALL PRIVILEGES赋予全权限
FLUSH PRIVILEGES;

5. 检查认证插件兼容性(MySQL 8.0+)

MySQL 8.0及以上版本默认使用caching_sha2_password插件,部分场景下mysql2客户端兼容性存在问题:

  • 查看用户的认证插件:
    SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
    
  • 如果插件为caching_sha2_password,修改为mysql_native_password:
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
    FLUSH PRIVILEGES;
    

内容的提问来源于stack exchange,提问作者Noah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:03:30