mysql连接提示access denied怎么办?

哎呀,我以前确实遇到过这个问题。
记得是2 01 6 年的时候,我在公司负责维护一台服务器。
那天,同事突然说数据库登录无法登录,导致出现“访问被拒绝”之类的情况。
当我看到它时,这是不可能的。
项目的进展无法因此而停止。

我快速登录服务器,首先打开vim编辑器并编辑/etc/my.cnf文件。
在[mysqld]下添加一行“Addskip-grant-tables”,然后重新启动MySQL服务。
之前看到过别人提到的这个技巧,说可以暂时解决这个问题。

重启后,我再次尝试使用命令行连接数据库,输入“mysql -u root -p”,这次可以进入了。
我很快执行了“flushprivileges;”命令,然后返回到 my.cnf 文件并注释掉我刚刚添加的行。

最后,我重新启动了MySQL服务。
准备好!我当时挺高兴的,感觉自己的技术又进步了。
不过说实话,现在想来,这个伎俩虽然很原始,但在当时却很管用。
哈哈,现在想起来,就像小时候玩游戏卡住的时候发现一个小bug一样。
虽然没有标准化,但或许能解决问题。

ERROR?1045?(28000):?Access?denied

等等,我朋友上次做项目的时候就遇到过这个错误。
这很烦人。
他家里使用的电脑,Windows系统,突然无法连接数据库。
他先是怀疑是不是密码错误,又试了几次还是不行。
然后他突然想到服务被关闭了。
他找到了一个叫MySQL的服务,发现它被停止了,于是他点击了它。
该服务再次运行。
他心想,完了,肯定是我配置错误了。
他赶紧打开my.ini文件,在电脑C盘根目录下找到了这个文件。
视野中没有任何跳过的桌子,他松了一口气。
他重新启动服务,再次尝试连接,并且能够连接。
他很快删除了skipgranttables并保存了它。
后来他又试了几次,都正常了。
他问我这是否是解决方案。
我说的是几乎,但要注意,有时可能不仅仅是这些原因。
他问我,如果还是不行怎么办?

为何在访问mysql的时候提示: SQLSTATE[ HY000

您提到的用户“root”@“localhost”的 SQLSTATE [HY000][1 04 5 ] 访问被拒绝错误确实非常烦人。
上次遇到类似情况是在2 02 2 年底帮客户调试服务器的时候。

我总结的解决方案大体方向是对的,但是有些细节需要在板上写下来。
特别是在步骤2 中,update user set host='%' where user='root',我建议您首先检查当前登录的用户是否实际上是root。
可以在命令行输入specify user, host from mysql.user where user='root';检查返回的主机值。

将主机更改为“%”允许root用户从任何地方登录,但此权限设置很危险,在生产环境中应谨慎使用。
如果只是临时补丁或者本地开发,可以考虑改回 'localhost',例如执行 update user set host='localhost' where user='root';然后清除权限;不要忘记这一步。

关于SELinux步骤(步骤4 ),是关于Linux系统安全策略的。
您确定服务器启用了 SELinux 吗?您可以通过在终端中输入 sestatus 来检查这一点。
如果SELinux处于禁用状态,当然不能直接在/etc/sysconfig/selinux中更改SELINUX=disabled。
您应该首先检查系统是否支持此配置,或者是否有其他安全模块在工作。

最后,重新启动Linux(第5 步)...好吧,这比较激烈,但有时它实际上可以解决一些基本问题。
不过,重启前最好备份重要数据,尤其是修改MySQL用户权限后。

总之,你的步骤基本上是好的,但是在步骤2 和步骤4 中,你需要特别注意当前的环境是否真的需要这样改变。
您可以先尝试只更改步骤2 ,然后重新登录看看是否仍然不行,然后再考虑SELinux问题。