解决Node.js mysql客户端不支持认证协议引发的“ER_NOT_SUPPORTED_AUTH_MODE”问题

发布于:2024-05-11 ⋅ 阅读:(155) ⋅ 点赞:(0)

这是一个版本问题 我用koa2和mysql2链接就没有问题 不知道这个老项目运行为啥有这个问题

解决方案

打开mysql运行这个两个命令:

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123321';
  2. FLUSH PRIVILEGES;

须知(给小白看的!)

上面的密码是你的密码
不能cmd运行 要用mysql运行
我这里没有配置环境变量 我直接用的mysql自带的命令行
在这里插入图片描述

在这里插入图片描述

具体原因是

我在2024年运行老版本的koa2项目可能是那个年代的项目不兼容当代的密码
导致这个错误的原因是,那个年代,的mysql模块并未完全支持MySQL 8的“caching_sha2_password”加密方式,而“caching_sha2_password”在MySQL 8中是默认的加密方式。因此,下面的方式命令是默认已经使用了“caching_sha2_password”加密方式,该账号、密码无法在mysql模块中使用。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; 

这句话是用于 MySQL 数据库的 SQL 语句,用来修改数据库用户 ‘root’@‘localhost’ 的身份验证方式和密码。

具体解释如下:

  • ALTER USER: 这是一个 SQL 命令,用于修改数据库用户的属性。
  • 'root'@'localhost': 这是要修改的用户的标识符。在这里,‘root’ 是用户名,‘localhost’ 是指该用户只能从本地连接到数据库。
  • IDENTIFIED WITH mysql_native_password: 这是指定用户身份验证方式的部分。mysql_native_password 是 MySQL 的一种身份验证插件,用于验证密码。
  • BY '123456': 这是指定用户的新密码。在这个例子中,密码被设置为 ‘123456’。

因此,整个语句的意思是将用户 ‘root’@‘localhost’ 的身份验证方式修改为 mysql_native_password,并设置密码为 ‘123456’。

FLUSH PRIVILEGES; 是 MySQL 数据库管理命令之一,用于重新加载授权表,使修改的用户权限生效,或者重新加载授权表中的内容。

当你对用户进行了修改、创建或删除,并且想要使这些更改立即生效时,就可以使用 FLUSH PRIVILEGES; 命令。这样做可以确保 MySQL 重新读取授权表,以便立即应用对用户权限的任何更改。


网站公告

今日签到

点亮在社区的每一天
去签到