40 Node 联接 MySQL 的环境部署

本文详细介绍了在Node.js环境中连接MySQL数据库的步骤,包括安装MySQL数据库,使用npm安装驱动,编写并执行测试代码。同时,针对MySQL服务未启动、密码策略错误、未知数据库错误、服务无法启动等问题,提供了相应的解决策略。特别指出,MySQL服务启动失败可能与Visual C++运行库版本冲突有关,解决此问题后,故障不再重现。此外,文章提及的一个未解决的问题是密码无法登录,作者通过重装MySQL解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、安装 MySQL 数据库

实现 Node 联接 MySQL,首先得安装有MySQL (本次测试安装的版本 8.0.18.0)可参考:
https://blog.youkuaiyun.com/weixin_44406595/article/details/103229407

2、安装 MySQL驱动: npm install mysql
D:\www\nodejs\study>npm install mysql
	npm WARN saveError ENOENT: no such file or directory, open 'D:\www\nodejs\study\package.json'
	npm WARN enoent ENOENT: no such file or directory, open 'D:\www\nodejs\study\package.json'
	npm WARN study No description
	npm WARN study No repository field.
	npm WARN study No README data
	npm WARN study No license field.

	+ mysql@2.17.1
	added 11 packages from 15 contributors and audited 14 packages in 7.494s found 0 vulnerabilities

发现安装效果与其它人的有差异,可能是版本差异吧,我这能正常执行,说明这驱动安装是正确的。

3、node.js 测试代码及运行成功结果:
// d40_mysql.js
var mysql      = require('mysql');
var connection = mysql.createConnection({	// 创建 connection 对象
	host     : 'localhost',
	user     : 'root',
	password : '666666',
	database : 'booksys',
	port 	   : '3306'
});

connection.connect(function(err){			// connection 连接
	if(err){
		console.log(err);
		return;
	}
	console.log('[connection connect] succeed!');
});

connection.end(function(err){				// connection 关闭
	if (err) {
		console.log(err.toString());
		return;
	}
	console.log('[connection end] succeed!')
});

d40_mysql.js 执行结果:

D:\www\nodejs\study>node d40_mysql.js
[connection connect] succeed!
[connection end] succeed!
4、MySQL服务未启动,可能出现的错误:
at internal/main/run_main_module.js:17:11 {
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '127.0.0.1',
  port: 3306,
  fatal: true
}
Error: connect ECONNREFUSED 127.0.0.1:3306

解决办法是启动 MySQL80服务: net start mysql80

5、MySQL 版本的密码策略,可能出现的错误:
at internal/main/run_main_module.js:17:11 {
  code: 'ER_NOT_SUPPORTED_AUTH_MODE',
  errno: 1251,
  sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
  sqlState: '08004',
  fatal: true
}

网上都说是mysql8.0以上版本密码策略和更改语法有不同,解决办法

mysql> alter user 'root'@'localhost' identified with mysql_native_password by '666666';
Query OK, 0 rows affected (0.12 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

① 重置密码(我的密码是: 666666 改为自己的密码 即可);
② flush privileges 使修改生效; 也可以重启1次 MySQL,同样能生效;

6、未知数据库:预连接的数据库未创建,可能出现错误:
at internal/main/run_main_module.js:17:11 {
 code: 'ER_BAD_DB_ERROR',
 errno: 1049,
 sqlMessage: "Unknown database 'testdb'",
 sqlState: '42000',
 fatal: true
}

恭喜恭喜你已经部署成功了 解决办法 只要创建 testdb数据库就能运行了,结合测试再创建个user表:

mysql> create database testdb;
Query OK, 1 row affected (0.11 sec)

mysql> use testdb;
Database changed
mysql> create table user(
    ->  uid int primary key auto_increment,
    ->  uname varchar(100) not null,
    ->  pwd varchar(32) not null
    -> );
Query OK, 0 rows affected (1.15 sec)
7、MySQL 服务无法启动,提示:
C:\Users\Administrator>net start mysql80
MySQL80 服务正在启动 .
MySQL80 服务无法启动。

服务没有报告任何错误。

请键入 NET HELPMSG 3534 以获得更多的帮助。

而且通过服务管理也启动不了,提示:
本地计算机上的MySQL80服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
网上很多解法都未解决根本问题,要么完全无效;
要么,有些方法暂时有用,但MySQL停止后便开不起来,问题再现。
问题反复出现,便反复重装 MySQL数据库,问题还是经常出现。

最终发现,是Visual C++运行库多版本兼容问题导致;
仅 Microsoft Visual C++ 2015 运行库1个版本时,再进行系列操作:
停止/启动mysql; 及电脑开关/重启等,故障未再出现。

*8、莫名其妙还出现 [密码无法登录]问题

问题8未搞定,我是通过重装 MySQL 才解决的,但这太麻烦了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值