NodeJS无法连接本地MySQL(localhost:3306)问题求助
NodeJS连接本地MySQL失败排查方案
首先,你的代码只提示了错误但没输出具体详情,这会导致无法定位问题。先修改代码,把完整错误信息打印出来:
const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', port: 3306, database: 'test', user: 'root', password: 'root' }); connection.connect(function (err) { if(err) { console.log("error occured: ", err); // 打印完整错误信息,方便定位问题 } else { console.log("connection created"); } })
运行修改后的代码,根据输出的具体错误,对照下面的常见原因排查:
- MySQL服务未启动:检查本地MySQL服务是否处于运行状态。Windows可在「服务」列表里查找MySQL;Mac/Linux用
systemctl status mysql(系统自带)或brew services list(brew安装的)查看,确保服务为running状态,未启动则手动启动。 - 端口不匹配:确认MySQL实际监听的端口是3306。查看MySQL配置文件(Linux/Mac为
my.cnf,Windows为my.ini)里的port字段,若端口不是3306,要么修改代码里的port值,要么将MySQL端口改回3306。 - 目标数据库不存在:登录MySQL客户端,执行
SHOW DATABASES;查看是否存在test数据库,没有的话用CREATE DATABASE test;创建。 - 账号密码错误:用
mysql -u root -p登录MySQL客户端,输入密码root验证是否能成功登录。如果密码不对,要么修改代码里的password字段,要么重置MySQL的root密码。 - 权限不足:若root账号被限制了本地连接权限,登录MySQL后执行以下命令刷新权限:
之后再尝试连接。GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'root'; FLUSH PRIVILEGES; - 依赖包兼容性问题:旧版
mysql包可能存在兼容性问题,换成官方推荐的mysql2试试:- 卸载旧包:
npm uninstall mysql - 安装新包:
npm install mysql2 - 代码里修改为
const mysql = require('mysql2');,其余逻辑不变。
- 卸载旧包:
- 防火墙拦截:本地防火墙或安全软件可能拦截了3306端口,暂时关闭后再测试连接。
内容的提问来源于stack exchange,提问作者Praneet Debnath
相关产品推荐
相关产品推荐

