今天是被MySQL8.17 和Navicat12 折磨
今天想搭个后台,在启动Navicat的时候突然连接不上报1045
接着就去doc 手动打开数据库,用密码进入看看,发现还是报1045,进不去,我以为是我密码记错了,就开始了重置密码的道路,一错再错。
MySQL8.17 重置密码
- 到MySQL安装目录,找到my.min文件,打开搜索sqld,在[mysqld] 后面加上skip-grant-tables,然后找到shared-memory去掉前面的注释。(这里相当于关掉的密码通道,不需要密码就可以进入MySQL)
- 管理员方式打开cmd,net stop MySQL,之后在net start MySQL.(意思是重启一下MySQL)
- 输入 mysql -u root -p 回车 不用输入密码,直接回车就可以进入.
- mysql>use mysql; (输入use mysql 回车)
- 查看user表;输入 select user,host,authentication_string from mysql.user; (MySQL8.17 的密码字段不是password,而是authentication_string)
- 如果root 对应的host 是localhost,那就大家欢喜,证明root有权限访问本地数据库。(我之前的不是localhost,所以即使密码改了,也一样无法连接数据库,报1045)
- 如果不是localhost,还能怎么办,改呗。语句 : update user set host='localhost' where user='root'; 如果root有多个就+and host='对应你自己的host列数据';
- 然后先更改root的密码为空,update user set authentication_string='' where user='root' and host='localhost';
- 退出 quit;之后关掉My'SQL : net stop MySQL ;关掉cmd窗口
- 回去MySQL刚刚更改的文件my.min,把skip-grant-tables注释掉,因为你已经有密码了,密码就是空
- 管理员打开cmd,打开My'SQL:net start MySQL
- mysql -u root -p 回车 不需要输密码,密码为空,直接回车,进入mysql
- 然后修改你想要的密码: ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘新密码’; (密码规则:要有大小写字母、特殊字符、数字,首位最好是字母,为什么要这样呢,因为MySQL8.17对爱情的加密方式就是这样,或者你可以改变你自己的加密方式,这又是另外的坑了)
- 可以出坑了,退出就可以去navicat连接mysql了