由于某种原因,我无法与服务器建立简单的连接。我用默认设置安装了最新的mysql community 8.0数据库和node.js。
这是我的node.js代码
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
insecureAuth : true
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
以下是在命令提示符中发现的错误:
C:\Users\mysql-test>node app.js
C:\Users\mysql-test\node_modules\mysql\lib\protocol\Parse
r.js:80
throw err; // Rethrow non-MySQL errors
^
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError (C:\Users\mysql-
test\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
at Handshake.ErrorPacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\sequences\Handshake.js:130:18)
at Protocol._parsePacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\Protocol.js:279:23)
at Parser.write (C:\Users\mysql-test\node_modules\mys
ql\lib\protocol\Parser.js:76:12)
at Protocol.write (C:\Users\mysql-test\node_modules\m
ysql\lib\protocol\Protocol.js:39:16)
at Socket.<anonymous> (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:103:28)
at Socket.emit (events.js:159:13)
at addChunk (_stream_readable.js:265:12)
at readableAddChunk (_stream_readable.js:252:11)
at Socket.Readable.push (_stream_readable.js:209:10)
--------------------
at Protocol._enqueue (C:\Users\mysql-test\node_module
s\mysql\lib\protocol\Protocol.js:145:48)
at Protocol.handshake (C:\Users\mysql-test\node_modul
es\mysql\lib\protocol\Protocol.js:52:23)
at Connection.connect (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\Users\mysql-test\server.js:
11:5)
at Module._compile (module.js:660:30)
at Object.Module._extensions..js (module.js:671:10)
at Module.load (module.js:573:32)
at tryModuleLoad (module.js:513:12)
at Function.Module._load (module.js:505:3)
at Function.Module.runMain (module.js:701:10)
我读过一些东西,比如:https://dev.mysql.com/doc/refman/5.5/en/old-client.htmlhttps网址:github.com/mysqljs/mysql/issues/1507
但我仍然不知道如何解决我的问题。任何帮助都将不胜感激:d
24条答案
按热度按时间20jt8wwn16#
我也遇到了这个问题,上面提到的mysql重新配置错误仍然出现。结果是我把数据库名拼错了。
因此,请确保使用正确的数据库名称进行连接,尤其是在案例中。
cxfofazt17#
只需运行mysql服务器安装程序并重新配置mysql服务器…这对我很有用。
7vux5j2d18#
检查mysql用户的权限和用户名/密码。
为了捕捉错误,使用overrided总是很有用的
_delegateError
方法。在您的情况下,这必须看起来像:这种构造将帮助您跟踪致命错误。
zfciruhq19#
在mysql工作台中执行以下查询
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
哪里root
作为您的用户localhost
作为您的url和password
作为您的密码然后运行此查询以刷新权限:
flush privileges;
完成此操作后,请尝试使用node进行连接。如果这不管用,那就不要试了
@'localhost'
部分。v1l68za420#
在mysql最新的docker容器中
fae0ux8s21#
如果你用的是docker,它对我有用!
在
docker-compose.yml
添加以下行:之后,
down
容器和up
再一次。oknrviil22#
在mysql 8+中,新的默认身份验证是
caching_sha2_password
而不是mysql_native_password
. 本机不支持新的更安全的身份验证方法mysql
包,但您应该考虑使用该包@mysql/xdevapi
相反,这是由甲骨文官方支持和维护的。要安装新软件包,请运行:
要连接到数据库并插入一些值:
官方文件包可在以下位置找到:https://dev.mysql.com/doc/dev/connector-nodejs/8.0/
vxqlmq5t23#
在尝试了很多事情之后才发现。最后为我做的是增加
require('dotenv').config()
给我的.sequelizerc
文件。显然sequelize cli不读取env变量。uidvcgyl24#
如果改变用户。。。命令行不适用于您,如果您使用的是windows 10,请尝试执行以下步骤:
1) 在windows搜索栏中键入mysql
2) 打开mysql windows安装程序-社区
3) 查找“mysql server”并单击reconfigure
4) 单击“下一步”直到进入“身份验证方法”阶段
5) 在“身份验证方法”阶段检查第二个选项“使用旧身份验证方法”
6) 然后按照windows安装程序给出的步骤进行操作,直到结束
7) 完成后,从windows搜索栏进入“服务”,单击“开始”mysql81。
现在,再试一次,mysql和node.js之间的连接应该可以工作了!