先贴出 node 连接池的代码
yarn add mysql -s
/* 创建一个数据库连接 */
const db = mysql.createPool({
host: '114.115.218.xx',
port: "3306",
user: 'root',
password: "xxx",
database: 'xxx'
});
db.getConnection((err, connection) => {
if(err) {
console.log("连接失败")
console.log(err);
}else{
console.log("连接成功")
}
})
场景说明:node 中本地数据连接成功,远程数据库连接失败,但使用 navicat 连接远程数据库成功。
node 连接失败报错
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
查找资料后确定 node 还不支持 mysql 8.0 以上加密方式
解决方案一:
/*进入数据库*/
mysql -u root -p"数据库密码";
/* 输入命令 */
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
/* 重启服务 */
FLUSH PRIVILEGES;
如果执行第二条出现错报
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
执行下面命令 将 localhost 改成 %
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Gongjian_93692';
参考地址
解决方案二
可以尝试用 mysql2 替代 mysql 依赖包
yarn add mysql2 --save