Nodejs连接MySql报错ER_NOT_SUPPORTED_AUTH_MODE处理


前言

使用nodejs连接MySql数据库时,出现了这样的报错,导致无法连接

const mysql = require('mysql');

const connection = mysql.createConnection({
  host: '47.109.71.47',
  user: 'test',
  password: 'mima0fTEST!',
  database: 'platform',
});

报错Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server;
consider upgrading MySQL client

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; 
consider upgrading MySQL client

一、原因

因为从 MySQL 8.0.4 开始,MySQL 默认身份验证插件从 mysql_native_password 改为 caching_sha2_password 所导致。可以参考 浅谈 MySQL 新的身份验证插件 caching_sha2_password

网上大部分提供的处理方式是改回mysql_native_password验证方式 ,可以解决问题,但是既然已经默认用新的插件了,并且从报错信息上来看是让我们升级MySql Client,因此我们还是希望能够正面的解决这个问题。

二、处理方式

使用npm list mysql可以查看到当前的nodejs中连接数据库的mysql库的版本是2.18.1。

[root@iZ2vcim9enkbf26jy2jyinZ test1]# npm list mysql
root@ /root
└── mysql@2.18.1

这个不是服务器MySql数据库的版本,指的是const mysql = require(‘mysql’);中的mysql连接库。

尝试升级这个mysql连接库,但是发现npm中这个库已经是最后的了
在这里插入图片描述

发现有mysql2具备了SSL 和 Authentication Switch的功能。
npm install mysql2安装mysql2
代码中使用mysql2

const mysql2 = require('mysql2');

const connection = mysql2.createConnection({
  host: '47.109.71.47',
  user: 'test',
  password: 'mima0fTEST!',
  database: 'platform',
});

之后再次运行,可以正常连接了!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值