关于MySQL拒绝访问的解决方法

当我们在使用一些开源项目的时候总是会遇到一些很奇怪的问题,而其他人又没有遇到。比如我在使用开源博客solo的时候,就遇到了ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

百度搜索基本都是什么没有权限,密码错误之类的。而我在命令行输入mysql -uroot -p是可以进入MySQL的,所以密码是正确的,权限的话我照着别人的语句给root加了权限还是同样的问题。这个时候怎么办呢?网友给出了答案:重装MySQL、重装docker,要不直接重装系统得了(高手的做法,不敢苟同)。

既然通过上面这个错误无法搜索到我想要的结果,那么只能换一个关键字了–MySQL密码正确怎么进不去。我翻了几页的搜索结果终于有一点头绪了,因为mysql没有绑定本地地址 localhost、127.0.0.1。刚才说我可以通过mysql -uroot -p进入SQL命令行,但是我通过mysql -uroot -h127.0.0.1 -p却显示拒绝访问,而通过mysql -uroot -hlocalhost -p又能进入。

我们输入如下语句就可以看到root账户绑定的地址

# 如果这个语句进不了,可以参考网上无密码进入MySQL
mysql -uroot -p 
# 进入MySQL命令行之后
use mysql;
select host,user,password from user;

正常情况下,我们会看到

关于MySQL拒绝访问的解决方法_第1张图片
而我的机器上在localhost这一行,password并没有值,而且没有127.0.0.1这条记录。这就导致了无法通过127.0.0.1进入了,我们需要向表中插入这个,保险起见在更新一下localhost的password密码弄成和图片一样的效果(没有对比图,因为我已经改了)。

出现这个问题的是我的Debian9.8系统,在centos上并没有这种问题。我建议在安装mysql之后,我们修改mysql的密码不要
set password for root@localhost = password('123456');
最好使用
update user set Password = password('123456') where user = 'root';
这样localhost和127.0.0.1都会增加密码。而且在增加远程访问的时候不要直接修改localhost为%(至于这个应该如何正确操作,我也没试过,等我有需求了在更新)。

你可能感兴趣的:(小白进阶之路)