本文转载于:《idea 连接 MySQL 8.0 以上遇到 Access denied for user ‘root‘@‘localhost‘ (using password: YES)密码错误的问题》,访问地址:https://blog.csdn.net/weixin_43621315/article/details/122541154
因为用的是 MySQL 8.0.26 ,想着 idea 既然支持就不想换 5.7 了。但是在连接本地 MySQL 的时候遇到了很多问题。虽然我的 mysql 是运行在本地 windows 上的,但是问题的原理我想不同的平台是一致的。
所有的问题都是从 idea 连接 数据库时的报错:Access denied for user ‘root‘@‘localhost‘ (using password: YES) 这个问题开始的。
这时候 Spring Boot 的数据库也连不上,报错:java.sql.Exception:Access denied for user ‘root‘@‘localhost‘ (using password: YES)
遇事不决问百度,然后说是密码不正确,要改密码(但是通过我的查找,发现,不是密码不正确,而是端口的问题),照着网上修改,并没有生效。一样报错。
通过跳过Mysql密码验证的方式:
1、在MySQL安装目录,c:\Program Flies\MySQL\bin里输入 mysqld --console --skip-grant-tables --shared-memory得到运行的一段内容后,不要关闭这个cmd。
2、无密码方式进入Mysql
再打开一个管理员模式运行的cmd,进入mysql下的bin目录后,直接登录mysql。输入mysql -u root -p此时会显示让你输入密码,直接回车,就可以成功连接Mysql。
3、将登陆密码设置为空
输入代码,将密码设置为空(此时还不能直接修改密码,必须先设置为空,否则会报错):
use mysql;
update user set authentication_string=’’ where user=‘root’;
quit;
更改自己的登陆密码
1、再打开一个cmd,用刚刚修改好的空密码登录mysql -u root -p
2、更改新密码:ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘新密码’;
3、quit;退出MySQL
4、关闭掉所有的界面,再次测试连接。
密码也改了,复杂度也提高了,yml 中的密码也填上了 "",不起效果。
还有就是将 MySQL 密码加密规则修改,因为 idea 和其他很多地方还是采用将 用户的 authentication_string 修改为:mysql_native_password。
然后就是权限的问题:因为使用 idea 属于使用的是本地连接,但是还是设置远程连接权限:
查看用户和主机(user 和 host):因为之前已经修改过密码,这里直接登录:use mysql;
接着: select host,user from user,查看用户权限
修改用户权限如下:
update user set host='%' where user='root';
flush privileges;
也没有用,最后想到是不是服务地址的问题,之后查看端口,看是否是端口错误:SHOW VARIABLES WHERE VARIABLE_NAME='port';或者直接 status都可查看端口,没有错误;
再看是不是有服务占用端口:发现是一个叫 mysqlzt的服务占用,在“我的电脑”右键,打开“管理”,在“服务”窗口中,停掉这个服务,再开启 MySQL 服务,再次连接成功。
根据服务 PID 查看端口:
netstat -ano | findstr pid
本文借鉴于:这里