提问者:小点点

为什么我的Node. js代码在xampp运行mysql时有效,但在mysql通知器运行mysql服务器时无效?


我不熟悉使用node. js和mysql,我有一个简单的脚本,它使用node将我登录到mysql服务器。

var mysql = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : ''
});
connection.connect(function(err) 
{
  if (!err)
    console.log('Connected');
  else
    console.log('Error connection');
    console.log(err);
});

当我的xampp mysql服务器运行时,它会返回连接,但是当xampp关闭并且mysql服务器通知程序正在运行时,它会返回此错误。

"code:'ER_NOT_SUPPORTED_AUTH_MODE', errno:1251,sqlMessage:'Client不支持服务器请求的身份验证协议;考虑升级MySQL client',sqlState:'08004',fatal:true}"我使用了mysql站点上的windows安装程序。我正在运行windows 10,它直接安装到我计算机的C驱动器中。


共3个答案

匿名用户

可以通过执行以下命令进行尝试吗:

use mysql;
update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';

匿名用户

我不知道什么是MySQL通知程序,所以我在谷歌上搜索。根据我在这里找到的留档(www.mysql.com),MySQL通知程序只通知您系统上的更改和与MySQL服务器的连接。

这意味着这个实用工具不是MySQL服务器,你不能像以前那样使用它。您需要一个正在运行的MySQL服务器(由xamp启动)。

有很多方法可以在没有xamp的情况下运行MySQL服务器:

  • 就像你做的那样:在你的Windows上使用独立的MySQL社区服务器:https://dev.mysql.com/downloads/mysql/
  • 使用Docker,如果您熟悉:https://hub.docker.com/_/mysql/

无论如何,您的服务器版本与您的客户端版本不匹配,这是您的mysqlNode. js库。这两个版本相互配合,但身份验证方法似乎发生了变化。

你使用哪个版本的?你尝试更新它了吗?npm更新mysql

最好的解决方案可能在这里:在mysqljsGitHub存储库中有一个关于这个主题的已结束问题,Andrey Sidorov建议

允许使用不安全的auth:https://github.com/mysqljs/mysql#connection-options不安全的auth选项。

来源:https://github.com/mysqljs/mysql/issues/1574

选项说明:

  • indureAuth:允许连接到要求旧(不安全)身份验证方法的MySQL实例。(默认值:假)

https://github.com/mysqljs/mysql#connection-options

您可以尝试将此选项设置为true

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '',
  insecureAuth: true
});

只是一件小事,“xamp”代表“LinuX Apache MySQLPHP”(所以你使用的是“wamp”-

匿名用户

如果您正在运行MySQL 8.0,那么您可能面临此处描述的相同问题(并且能够使用相同的解决方案解决它)。