飞鱼

恭喜你发现了一个菜鸡博主。

NodeJS 连接 MariaDB 遇到错误 ER_NOT_SUPPORTED_AUTH_MODE

飞鱼 2020年03月05日 08:12:56

如何解决 NodeJS 连接 MariaDB 时遇到的大坑 ER_NOT_SUPPORTED_AUTH_MODE

今天下午本想在自己的笔记本上调试一个 NodeJS 项目,因为本机已经装了 MariaDB 所以就直接用了。

登录 MariaDB

mysql -u root -p

导入数据表结构

create database `mychatroom`;
use `mychatroom`;
source /home/apps/chat/chat.sql;

运行项目

cd /home/apps/chat
node app

打开浏览器访问:localhost:3000

啊咧?好像卡住了?

遂检查控制台

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

What ? ! 什么情况,在其它地方调试过了,没有问题啊?看这提示大概意思是,不支持当前的认证模式。

立马打开谷歌搜索:ER_NOT_SUPPORTED_AUTH_MODE 的相关信息。

网上搜索到的都是 MySQL 遇到此类问题的解决方法

use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
flush privileges;

但我是 MariaDB 啊。。

先修改连接参数,增加 insecureAuth : true

var mysql = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '********',
  database : 'mychatroom',
  insecureAuth : true
}); 

再试,还是不行。。

继续查资料,再试,还是不行。。。

于是又谷歌 “how to change mariadb auth mode”

总算找到了解决办法

use mysql;
ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD("newpassword");
flush privileges;

还有备选方案

use mysql;
update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';
flush privileges;

最后再友情提醒一下:请务必给数据库设置一个复杂的 root 密码

本来只是调试一个项目,结果浪费了半个多小时的时间。算是给我这个菜鸡一个教训吧,填完了坑,记录一下。希望能帮助到遇到相同问题的同学。


© 2020 飞鱼的博客