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
相关产品推荐
相关产品推荐

