前言
使用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',
});
之后再次运行,可以正常连接了!