# 解决Mysql错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)
目录
# 前言
很多新手在做后端项目一般都会跟mysql打交道,难免会遇到mysql的各种问题,如下面这个:
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)
这个错误可能有两种情况:
1)用户名或密码错误:需要修改登录密码
2)root用户被禁止登录:需要增加root用户连接权限
# 解决方案
# 1 修改mysql配置文件
打开mysql配置文件:
windows环境:mysql安装目录下的my.ini
,linux环境:/etc/my.cnf
在[mysqld]
节增加skip-grant-tables
,意思是跳过验证,如:
# 2 重启mysql服务
linux:
命令行输入:systemctl restart mysql
windows:
1)按下键盘组合键:win+R,调出运行命令窗口
2)在找到mysql服务,右键点击重启
此时mysql已经可以免密登录
# 3修改登录密码
命令行登录mysql
windows
用命令行进入mysql目录下的bin目录,或在bin目录按住shift
+右键点击此处打开powershell窗口
linux
继续操作
命令行操作如下:
mysql -uroot
依次执行下面命令,修改为新密码
USE mysql ;
UPDATE user SET Password = password('新的密码') WHERE User = 'root' ;
flush privileges ;
检查root是否有localhost连接权限
SELECT host,user FROM user;
如图所示host代表mysql可以接受root账号的来源地址,其中%代表可以接受任意地址连接;如果缺少对应连接地址也会提示access deny,请根据实际需要执行下面的脚本
增加root@localhost连接权限
grant all privileges on *.* to root@localhost with grant option;
增加[email protected]连接权限
grant all privileges on *.* to root@'127.0.0.1' with grant option;
增加内网地址[email protected]连接权限,这个场景是只有数据库和web应用分别在两台机器上,web应用部署在192.168.3.22地址,则需要加入这个权限才能远程访问mysql
grant all privileges on *.* to root@'192.168.3.22' with grant option;
增加root@%连接权限,表示可以在任意地址远程连接mysql数据库,生产环境不建议这样使用
grant all privileges on *.* to root@'%' with grant option;
# 4移除skip-grant-tables
此时已经修改了root密码,mysql现在还在裸奔,所以把mysql配置的skip-grant-tables移除掉,然后再重启mysql服务