access denied
在这个问题纠结了好些天,最后在这篇博客找到解决方法,转载记录下
https://blog.csdn.net/qq_36735409/article/details/78032144
好久没动自己windows电脑上的mysql数据库了,今天用的时候发现navcat到期了,网上找了一个破解文件,挺好用,分享一下:
连接数据库的时候发现报错:
于是没办法,只好去网上找解决的办法。
然而找了一圈,并没有一个能够解决我这个问题的(因为是我个人的原因)。
不过好在问题已经解决,所以在这里总结一下:
1、出现这个问题的原因之一是权限的问题,也就是说你的电脑可能没有权限访问mysql数据库。
讲道理这种情况其实基本上不该遇到,因为我们在安装mysql之后,root其实是有最高权限的,而且很少会有人去修改root的权限。
这个问题的解决方法就是授权。授权命令大概是这样的:
grant all privileges on *.* to 'root'@'我电脑的ip地址' identified by '密码';
如果你不是用root登陆的,那么就把root改成你的登陆名。
有的同学可能不知道这个命令往哪里写,
开始——运行——输入“cmd”——点击确定
这样就打开了我们的命令提示符界面:
然后找到我们的mysql的安装目录,将目录复制到命令提示符中。如图:
(cd 是什么意思我想不用特别解释了吧)
然后进入目录下的bin文件:
然后输入 mysql -u root -p 如图:
在Enter password: 后面输入你的密码。点击回车。
如果密码正确,会出现Welcome 的字符。
如图:
这样就成功进入了mysql数据库。
当然如果你已经设置了环境变量,那么不用进入mysql目录,直接输入mysql -uroot就可以了。
当然,你也可以直接打开mysql下的bin窗口,然后按住shift+鼠标右键,选择“在此处打开命令窗口”,就可以直接在bin目录下打开命令提示符窗口了。
接下来就简单了,直接将上面的代码修改一下就可以用了。比如我的电脑的ip地址是:192.168.0.103,我的root密码是:123456,那么我就可以将授权的语句改成:
grant all privileges on *.* to 'root'@'192.168.0.103' identified by '123456';
如果你是本地登录的,那么:
grant all privileges on *.* to 'root'@'localhost' identified by '123456';
当然你也可以直接改成这样:
grant all privileges on *.* to 'root'@'%' identified by '123456';
就可以给所有ip都设定root登陆了。
如果授权成功,会有Query OK的提示。
然后:
flush privileges;
这个是刷新授权的意思,如果没有这句话,授权可能无法立刻生效。
exit;
这个是退出的意思。
授权完成以后,你可以再尝试一下登陆,看看能不能登上。反正我登陆不上。
2.需要重新设置root密码(忘记root密码)。
忘记密码的情况还是比较常见的,如果你忘记了密码,用navicat登陆的时候也会有这个提示,那么就需要修改root密码了。
这一步我也从网上找了一些方法,然后还是没有解决问题,最后才知道是被自己给坑了——
第一步:找到mysql的根目录,找到根目录下的bin文件,按住shift键,右击鼠标,选择:在此处打开命令窗口。如图:
在命令行输入 net stop mysql 来停止当前运行中的mysql服务。
然后坑来了:
提示没有启动mysql服务。
可是我刚刚是登陆进去的,我知道是启动了的,于是net start mysql 启动一下:
服务无法启动……
好在还可以在管理里面启动服务:
计算机——右键——管理——服务和应用程序——服务——MySQL——启动:
出现这个提示。而且mysql后面紧跟的mysql57,mysqla又是什么东西?
看不明白,只好去网上找答案,网上也有说要找my.ini 文件的,也有说跟data文件夹有关的。然后我又看了一眼自己的mysql根目录:
真的没有data文件夹,而且连my.ini配置文件都没有……哇!我都怀疑是不是装了一个假的数据库。又去bin文件夹里找,也没有my.ini文件。
然后又看到网上有大神说5.7版本以后的mysql好像就是没有data文件夹,解决办法就是,要么从别的数据库拷贝一个过来,要么用命令提示符重新生成一个data文件夹。
拷贝的当然不合适,最好还是用语句生成一个。
生成语句:mysqld --initialize-insecure --user=mysql
这个语句需要执行一段时间,执行完成之后,目录已经生成了一个data文件:
这下应该没有什么问题了吧!net start mysql:
还是启动不了……
难道是没有my.ini的原因?网上找了一下,my.ini是配置文件,不可能没有的。如果没有的话mysql是不能正常工作的。
而我的mysql是可以正常工作的,原因就是我刚刚上面修改权限的时候还用123456这个密码登录进去,修改成功了……
我突然想到我可以直接进入mysql,跟刚刚修改权限一样,修改一下密码就可以了,为什么非得纠结在这个net start mysql 呢?
于是 mysql -u root -p 登陆数据库。
use mysql;
update user set password=password('123') where user = 'root';
如图:
报错:不知道'password'是什么。
原来现在password已经不叫password了,而是叫 authentication_string:
update user set authentication_string=password('123') where user = 'root';
然后刷新:
flush privileges;
关闭:
quit;
现在密码已经改成123了,现在你可以试一下用root和123登陆,看看能不能在navicat登陆上。反正我是没登上。
我已经绝望了。
出去吸了一支烟。
回来:
net start mysql57:
请求的服务已经启动。
难道我的电脑装了两个mysql,导致冲突了???于是我又找到计算机管理,把mysql57服务停止,再启动mysql服务。没办法,又把mysql57下面
的那个可疑的mysqla服务停止,然而,
还是启动不起来。
于是我右键查看mysql的属性:
可执行文件路径就是我一直在用的这个路径。
现在最大的疑点就是my.ini了。百度找了一圈,发现它竟然在progrAMData里:
为了验证这个ini文件究竟是不是mysql的文件,在my.ini 文件中找到[mysqld]字段,
并在下面添加skip-grant-tables,如图:
然后回到命令提示符:
mysql -u root -p
不输入密码,直接回车,发现也进入了mysql.
(通过这个方法,在不知道密码的情况下进入mysql,然后修改root的密码,
update user set authentication_string=password('123') where user = 'root';
步骤同我上面介绍的修改密码的方法一样。)
也就是说这个my.ini就是mysql的ini。
于是我又回到管理,找到mysql57的路径:
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" MySQL57
于是我又看了一眼mysqla的路径:
G:\phpstudy\mysql\bin\mysqld.exe MySQLa
哇,我好像突然明白到底是什么原因了……
于是我把mysqla服务停止,然后重新用navicat登陆mysql:
成功了……
相关阅读
MySQL版本大于5.0时,有个默认数据库information_schema,里面存放着所有数据库的信息(比如表名、 列名、对应权限等),通过这个数据库,
python连接pymssql报OperationError:20009...错误(SQL s
在数据库配置管理器中,打开TCP/IP,改为启用,双击可查看端口号。
解决上传文件时 nginx 413 Request Entity Too Large
一个使用Tomcat 发布的站点,使用Nginx做了代理,在上传文件时发生以下错误:<html> <head><title>413 Request Entity Too Large</titl
1,显示当前查询结果的行号SELECT @rownum := @rownum +1 AS rownum, e.* FROM (SELECT @rownum := 0) r, employee
谷歌无法启动更新检查(错误代码为4: 0x80070005-syste
Chrome 更新出现:无法启动更新检查(错误代码为 4: 0x80070005 — system level)是什么原因?应该怎么解决呢?Google浏览器Chrome更