解决Node.js mysql客户端不支持认证协议引发的问题
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,前言mysql模块(项目地址为https://github.com/mysqljs/mysql)是一个开源的、JavaScript编写的MySQL驱动,可以在Node.js应用中来操作MySQL。但在
千家信息网最后更新 2026年11月02日解决Node.js mysql客户端不支持认证协议引发的问题
前言
mysql模块(项目地址为https://github.com/mysqljs/mysql)是一个开源的、JavaScript编写的MySQL驱动,可以在Node.js应用中来操作MySQL。但在使用过程中,出现了"ER_NOT_SUPPORTED_AUTH_MODE"问题。
本文介绍了出现该问题的原因及解决方案。
报错信息
当我试图使用mysql模块来连接MySQL 8时,出现了如下错误信息:
D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\index.js:17throw error;^Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL clientat Handshake.Sequence._packetToError (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)at Handshake.ErrorPacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)at Protocol._parsePacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:291:23)at Parser._parsePacket (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Parser.js:433:10)at Parser.write (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Parser.js:43:10)at Protocol.write (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:38:16)at Socket.(D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:91:28)at Socket. (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:525:10)at Socket.emit (events.js:196:13)at addChunk (_stream_readable.js:290:12)--------------------at Protocol._enqueue (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:144:48)at Protocol.handshake (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\protocol\Protocol.js:51:23)at Connection.connect (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\node_modules\mysql\lib\Connection.js:119:18)at Object. (D:\workspaceGithub\nodejs-book-samples\samples\mysql-demo\index.js:12:12)at Module._compile (internal/modules/cjs/loader.js:759:30)at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)at Module.load (internal/modules/cjs/loader.js:628:32)at Function.Module._load (internal/modules/cjs/loader.js:555:12)at Function.Module.runMain (internal/modules/cjs/loader.js:826:10)at internal/main/run_main_module.js:17:11
出错原因
导致这个错误的原因是,目前,最新的mysql模块并未完全支持MySQL 8的"caching_sha2_password"加密方式,而"caching_sha2_password"在MySQL 8中是默认的加密方式。因此,下面的方式命令是默认已经使用了"caching_sha2_password"加密方式,该账号、密码无法在mysql模块中使用。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.12 sec)
解决方法
解决方法是从新修改用户root的密码,并指定mysql模块能够支持的加密方式:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';Query OK, 0 rows affected (0.12 sec)
上述语句,显示指定了使用"mysql_native_password"的加密方式。这种方式是在mysql模块能够支持。
再此运行应用,可以看到如下的控制台输出信息:
$ node index.jsThe result is: RowDataPacket { user_id: 1, username: '老卫' }其中,"RowDataPacket { user_id: 1, username: '老卫' }"就是数据库查询的结果。
源码
本节例子可以在https://github.com/waylau/nodejs-book-samples的"mysql-demo"应用中找到。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
方式
模块
加密
支持
信息
原因
应用
问题
密码
就是
方法
错误
例子
内容
前言
命令
地址
控制台
数据
数据库
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网与科技
互联网科技公司华为
高科技与互联网
中国 科技 互联网
互联网科技英文
兼蜜互联网科技
火传媒上海互联网科技
字节跳动和互联网科技
互联网和黑科技的看法
阿大互联网科技有限公司
996高科技互联网公司
如何创新互联网科技
互联网科技如何创业
中科明德北京互联网科技
深圳互联网科技的发展
江苏互联网智能科技软件
半导体行业属于互联网高科技类吗
广州互联网高科技取餐柜
重庆科技产业互联网有哪些
广东猫王互联网科技有限公司电话
有格互联网科技
有马互联网科技
浙江互联网科技研学营
开一家科技互联网公司需要多少钱
乌鲁木齐新华智原互联网科技学校
高科技互联网发展前景如何
互联网科技快讯热点
互联网界的黑科技
云南互联网科技学费
科技互联网专业务虚会材料