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 才解决的,但这太麻烦了