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修改过端口,代码必须同步
- MySQL数据库名区分大小写(受系统和lower_case_table_names配置影响),比如Workbench里是
验证数据库用户权限
用Workbench登录目标账号,执行以下SQL:SHOW GRANTS FOR '你的用户名'@'你的主机';确保输出中包含目标数据库的权限(比如
GRANT ALL PRIVILEGES ONyour_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
相关产品推荐
相关产品推荐

