一次连接MySQL的坑 Access denied for user ‘root‘@‘localhost‘ (using password: YES)


问题描述

终端命令行输入用户名和密码可以进MySQL,也可以正常进行一系列操作。
但是只要一到代码里面发送请求访问就不行。(我的后端是用nodejs写的)

输入正确的用户名和密码,总是报错:Access denied for user 'root'@'localhost' (using password: YES)

const mysql = require('mysql');
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: '123456',//密码正确
  database: 'my_database',
  port: '3306'
  });

在这里插入图片描述


原因分析:

1.出现access denied的原因有如下可能:
1)mysql的服务器停止
2)用户的端口号或者IP导致
3)mysql的配置文件错误----my.ini等文件
4)root用户的密码错误**

我几乎按照网上教程逐一排除了,其中第2)点我用的是这篇博客排除的,其实和我最后正确的解决办法差不多,只不过他是通过端口号寻找进程的,甚至找到的进程是同一个。可是就是没有解决我的问题。呜呜,然后继续找了很多原因。

2.分析是不是我的代码有误,不能连接数据库。

const mysql = require('mysql');
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: '',//密码置空
  database: 'my_database',
  port: '3306'
  });

把密码置空,竟然可以连接到数据库,可以获取到默认数据库和表,比如user表、权限表等等。但是不能访问我自己创建的数据库和表。所以可以排除这个原因。

3.后来又查到的貌似是Nodejs与MySQL8.0以上不兼容。原因貌似是MySQL8.0里面的加密方式更新之类的,目前Nodejs还不支持这个加密方式连接方式。

我按照网上在Navicat里面改变了加密方式(变成传统的mysql_native_password),同时我用Java重新写了一遍,也报同样的错。所以可以排除这个原因。

4.后来觉得是MySQL8.0版本太高了,出现其他我不知道的问题。

我问了装了MySQL8.0的同学,同学说“everthing is ok!”

5.应该是我电脑本身的有些未知的程序、或者进程、或者缓存之类的影响。

然后走投无路的时候问了同学,同学说他经常出现这个问题,索性就记下来。甚至是很多次MySQL服务起不来的万能用法

后来我查了查,感觉比较说的过去的理由是:
如果服务器的mysqld-nt.exe 占CPU很高,一般是因为MYSQL的数据库中有数据进行采集,或者是数据库出现问题。一般CPU过高是因为该用户生成静态或者进行采集。而控制程序池无法解决数据库CPU过高的问题。输入 mysql> show processlist;查询现在mysql在干什么。按向上箭头再查询一边,看哪个数据库查询的语句比较频繁!一般是睡眠连接过多,严重消耗mysql服务器资源(主要是cpu, 内存),并可能导致mysql崩溃。

emm,好像有点官方看不太懂。。。


解决方案:

若大家可以在前面的提到的那篇博客里面解决了问题,那就是说明我当时操作有误。我感觉本质上差不多的,只不过一个是通过占用了端口号找到杀死进程,一个是通过查找当前任务列找到并杀死进程。

解决方案分为四步:

终端cmd,以管理员身份运行:

1. 暂停MySQL服务。

C:\Program Files\MySQL\MySQL Server 8.0\bin>net stop mysql

或者服务里面停止。

2. 找到mysql任务列正在运行的进程。

C:\Program Files\MySQL\MySQL Server 8.0\bin>tasklist|findstr "mysql"

3. 杀死这些占用的进程。

C:\Program Files\MySQL\MySQL Server 8.0\bin>taskkill/f /t /im mysqld.exe
  1. 重启MySQL服务。
C:\Program Files\MySQL\MySQL Server 8.0\bin>net start mysql

或者服务里面启动。

问题解决!

注意:若MySQL服务启动不起来也关闭不了,也可以继续执行2、3步,甚至先重启电脑再执行一遍。总之,问题应该就是,是MySQL进程占用卡死。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值