VSCode调试Node.js项目连接MySQL报1045访问被拒绝错误怎么解决?
MySQL 1045连接报错排查与解决
你遇到的ER_ACCESS_DENIED_ERROR(错误码1045)是MySQL服务端拒绝root@localhost用户登录导致的身份校验失败问题,可按照以下顺序排查:
- 密码配置不匹配
你代码中填写的password: '1234'和本地MySQL root用户的实际密码不一致是最高发原因。
解决方法:
首先在本地终端/命令行执行登录命令验证密码有效性:mysql -u root -p
回车后输入1234,如果无法登录说明密码错误,按照你使用的操作系统对应的流程重置root密码,重置后将代码中的密码改为新的正确值即可。 - root用户登录权限不足
部分默认安装的MySQL会限制root用户的登录来源,不允许通过localhost的TCP连接访问。
解决方法:
手动登录MySQL后依次执行以下SQL命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '你的root密码' WITH GRANT OPTION; FLUSH PRIVILEGES;
执行完成后重试Node.js项目的数据库连接。
- MySQL 8.0+加密插件不兼容
你使用的mysql@2.18.1驱动对MySQL 8.0及以上版本默认的caching_sha2_password密码加密方式兼容性较差,即使密码正确也会触发鉴权失败报错。
解决方法(二选一即可):
- 更换兼容更好的驱动:执行命令
npm uninstall mysql && npm install mysql2,将index.js中const mysql = require('mysql');改为const mysql = require('mysql2');,其余连接代码无需修改。 - 修改root用户加密规则:手动登录MySQL后依次执行以下SQL命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的root密码'; FLUSH PRIVILEGES;
- MySQL端口配置错误
如果你的本地MySQL服务修改了默认端口(非3306),代码中未指定正确端口也会触发连接失败。
解决方法:
在mysql.createConnection的配置项中添加对应的端口参数,例如你的MySQL端口为3307,就添加port: 3307即可。
内容的提问来源于stack exchange,提问作者Alper Yıldırım
相关产品推荐
相关产品推荐

