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

Node.js(Express.js)服务器连接MySQL失败求助

排查步骤与解决方案
  • 核对连接参数与Workbench完全一致
    检查server.js中的host、database、port、user是否和Workbench的连接配置丝毫不差:

    • MySQL数据库名区分大小写(受系统和lower_case_table_names配置影响),比如Workbench里是my_test_db,代码里别写成My_Test_DB
    • 若Workbench用localhost,代码里不要写成127.0.0.1(虽然多数场景兼容,但MySQL8.0可能因socket路径差异导致问题)
    • 确认端口号,默认3306,若Workbench修改过端口,代码必须同步
  • 验证数据库用户权限
    用Workbench登录目标账号,执行以下SQL:

    SHOW GRANTS FOR '你的用户名'@'你的主机';
    

    确保输出中包含目标数据库的权限(比如GRANT ALL PRIVILEGES ON your_db.* TO 'user'@'localhost';)。若权限不足,执行:

    GRANT ALL PRIVILEGES ON `你的数据库名`.* TO '用户名'@'主机';
    FLUSH PRIVILEGES;
    
  • 检查mysql2连接代码的正确性
    确保连接代码没有语法或逻辑错误,建议用带错误捕获的测试代码排查:

    const mysql = require('mysql2/promise');
    
    // 替换成你的实际配置
    const pool = mysql.createPool({
      host: 'localhost',
      user: 'root',
      password: '你的密码',
      database: '正确的数据库名',
      port: 3306
    });
    
    async function testDBConnection() {
      try {
        const conn = await pool.getConnection();
        console.log('数据库连接成功');
        conn.release();
      } catch (err) {
        console.error('连接错误详情:', err.message, err.code);
      }
    }
    
    testDBConnection();
    

    运行这段代码,终端会输出更详细的错误码(比如ER_BAD_DB_ERROR确实是库不存在,ER_ACCESS_DENIED_ERROR是权限问题),方便精准定位。

  • 适配MySQL8.0的认证方式
    MySQL8.0默认使用caching_sha2_password认证,虽然mysql2支持该认证,但部分旧环境可能存在兼容问题。可以将用户认证方式改为mysql_native_password:

    ALTER USER '你的用户名'@'主机' IDENTIFIED WITH mysql_native_password BY '你的密码';
    FLUSH PRIVILEGES;
    
  • 确认目标数据库真实存在
    在Workbench中执行SHOW DATABASES;,检查你代码中填写的数据库名是否在结果列表里。如果不存在,先执行CREATE DATABASE 你的数据库名;创建数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:16:08