今天在使用Navicat远程登录mysql突然登录不上了,提示 “1045 - Access denied for user 'root'@'localhost' (using password: YES)”。
YES还是NO只是表示你有没有输入密码而已,没有输入就是NO,YES就表示输入了密码。
花了很多时间才找到符合自己出现的问题,从网上我总结三种有这种提示的情况:
一、user表中的没有root(root被误删了)或者忘记登录密码了
二、user表中的root没有设置允许远程登录(Host没有“%”)
三、root的远程登录密码过期了

先解决第二种和第三种情况,因为第三种情况在服务器是能正常使用密码登录的

1、执行use mysql;命令

2和3命令二选一就行(自测),加上password expire never是把密码设置为永不过期(pwd为你的密码)
2、执行alter user 'root'@'%' identified by 'pwd' password expire never;命令

3、执行alter user 'root'@'%' identified with mysql_native_password by 'pwd' password expire never;命令

4、执行flush privileges;命令进行刷新

再次使用Navicat进行远程登录就行了(我遇到的密码过期问题。之前设置远程登录的时候没有添加password expire never

第一种情况我们是不能通过正常的密码访问的,需要绕过权限表进行登录,然后对应的设置

1、执行查看mysql安装目录:which mysql
显示出现目录:
/usr/bin/mysql

2、查看mysql配置文件my.cnf文件:/usr/bin/mysql --verbose --help | grep -A 1 'Default options'
显示的结果(顺序从以下文件中读取):
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
文件在哪个位置则编辑哪个文件,比如我的是/etc/my.cnf

3、编辑配置文件:sudo vim /etc/my.cnf
找到[mysqld],在[mysqld]的下边添加:skip-grant-tables
保存退出编辑

4、重启mysql服务:service mysql restart

5、输入指令mysql -u root -p,按下回车键直接免密码登录

在进入mysql之后,输入use mysql指令按下回车键,再输入select host,user from user;指令按回车
查看是否存在root用户(一个host为localhost的root,一个host为%的root)。
不管是忘记密码还是缺少root用户,都可以用第6步的指令进行操作

6、如果缺少哪个,就执行如下哪个指令(pwd为你的密码):
缺少localhost的指令:create user 'root'@'localhost' identified by 'pwd' password expire never;
缺少%的指令:create user 'root'@'%' identified by 'pwd' password expire never;

如果执行第6步报错“ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement”
则执行flush privileges;指令进行刷新再执行第6步的指令

如果还是报错再执行drop user 'root'@'localhost';指令,然后再执行第6步的指令
它没保存,那么创建root用户就成功了!

执行GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;指令为root用户赋予操作所有表的权限

7、执行flush privileges;指令进行刷新后,再执行exit;退出

8、把第3步添加的内容去掉后执行service mysql restart重启mysql服务

9、再次输入指令mysql -u root -p即可使用新密码登录