Node.js连接MySQL报Access denied错,命令行/Workbench可正常连接求解答
解决Node.js连接MySQL时出现"Access denied for user 'root'@'localhost' (using password: YES)"的问题
密码含隐形字符
复制粘贴密码时可能带入空格、换行这类看不见的字符,命令行和Workbench输入时会自动过滤,但代码里的字符串会原样传给MySQL。手动重新输入一遍代码里的密码,确保没有多余字符。host身份认证差异
MySQL中root@localhost和root@127.0.0.1是两个独立的用户:- 命令行和Workbench默认用socket连接,对应
localhost身份 - 你代码里用的
127.0.0.1是TCP/IP连接,对应另一个身份
两种解决方式:
- 把代码里的
host改成"localhost" - 给
root@127.0.0.1授权,登录MySQL执行:GRANT ALL PRIVILEGES ON my_db_01.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
- 命令行和Workbench默认用socket连接,对应
端口号类型不匹配
你代码里的port是字符串"3306",虽然mysql2多数时候能自动转换,但部分版本可能存在兼容问题,改成数字类型试试:const db = mysql.createConnection({ host:"127.0.0.1", port:3306, // 改为数字 user:"root", password:"123456", database:"my_db_01" })数据库权限不足
确认root@127.0.0.1有权访问my_db_01数据库,登录MySQL命令行执行:SHOW GRANTS FOR 'root'@'127.0.0.1';如果结果里没有针对
my_db_01的权限,执行前面的授权语句即可。密码认证插件不兼容
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'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Yuan J
相关产品推荐
相关产品推荐

