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

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连接,对应另一个身份
      两种解决方式:
    1. 把代码里的host改成"localhost"
    2. 给root@127.0.0.1授权,登录MySQL执行:
      GRANT ALL PRIVILEGES ON my_db_01.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456';
      FLUSH PRIVILEGES;
      
  • 端口号类型不匹配
    你代码里的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:05:26