Mysql8.0 连接提示 Client does not support authentication protocol ..和Access denied for user 'root'@'....

这两天在使用nodejs写后台程序,需要连接mysql。
mysql使用的是8.0版本的。遇到的一些问题,在网上搜索解决方案,发现很多都只适用于老版本,所以,我整理了一些8.0版本可以使用的解决方法,方便以后使用。

nodejs程序如下:

var mysql  = require('mysql');
//定义连接
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : '123456',
    port: '3306',
    database: 'test'
});
//连接开启
connection.connect();
//查询语句
var  sql = 'SELECT * FROM web';
//查询开始
connection.query(sql,function (err, result) {
    if(err){
        console.log('[SELECT ERROR] - ',err.message);
        return;
    }
//输出查询结果
    console.log('--------------------------SELECT----------------------------');
    console.log(result);
    console.log('------------------------------------------------------------\n\n');
});
//连接结束
connection.end();

一、

编译后输出错误:
Client does not support authentication protocol requested by server; consider upgrading MySQL client .
问题原因:我所使用的mysql版本是8.0,而8.0版本的数据库加密方式与5.0不一样。
解决方法:
1、show databases;–显示所有数据库
在这里插入图片描述
2、use mysql;–使用mysql数据库
3、show tables;–显示所有表(可以跳过这一步)
在这里插入图片描述
4、select * from user;(可以跳过这一步)
在这里插入图片描述
从上图可以看到,user表中是没有password属性的(8.0的password属性改变了)。所以,网上有人使用
select user,password,host from user;
命令找到password,然后使用
update user set password=old_password(‘your new password’) where user=‘user name’;
命令修改加密方式在8.0是行不通的。所以要使用下一步。
5、
select host,user,plugin,authentication_string from mysql.user;
在这里插入图片描述
备注:host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码
6、
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘newpassword’; #更新一下用户的密码 root用户密码为newpassword

至此,我的nodejs已经解决这个版本过低的问题了。

二、

不过,随后编译跳出一个新的问题:
Access denied for user ‘root’@‘localhost’ (using password:YES)

问题原因: 经查找资料发现是root帐户默认不开放远程访问权限,所以需要修改一下相关权限。

解决方法:
1、打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”,保存并关闭文件。(window默认安装 my.ini 在C:\ProgramData\MySQL\MySQL Server 5.6)

2、重启MySQL服务。

3、通过命令行cd进入MySQL的BIN目录,输入“mysql -u root -p”(不输入密码),回车即可进入数据库。(Windows默认安装BIN目录为:C:\Program Files\MySQL\MySQL Server 5.6\bin)

4、执行“use mysql;”,使用mysql数据库。

5、 alter user ‘root’@'localhost’IDENTIFIED BY ‘123456’;(我将密码设置为123456,大家可以根据自己的喜好修改)
(网上有执行“update user set password=PASSWORD(“123456”) where user=‘root’;”(修改root的密码)。这在8.0是行不通的,因为8.0中没有password属性。)

6、打开MySQL目录下的my.ini文件,删除最后一行的“skip-grant-tables”,保存并关闭文件。

7、重启MySQL服务。

8、在命令行中输入“mysql -u root -p 123456”,即可成功连接数据库。

至此,我重新编译nodejs文件,可以连接数据库,并且输出数据。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值