denied 虚拟机access_centos虚拟机下的mysql登录时出现Access denied for user 'root'@'localhost' (using password: YES...

centos虚拟机下的mysql登录时出现Access denied for user 'root'@'localhost' (using password: YES) 及外部拒绝访问的解决方法

先说下我的情况,我用的mysql是docker部署的。然后在使用过程遇到两个问题。

1.外部拒绝访问,就是想Navicat或者sqlyog的外部软件访问报错。

2.在linux下的mysql命令行登录也出现权限问题。

第一个问题的解决方法挺简单的,就是授予权限。但是授予权限是要在mysql命令行下执行的,然后就因为第二个问题,mysql登录不进去,给卡死了。下面说下解决方法。

1.MySQL登录出现权限拒绝问题

解决方法就是重置密码。。没错,没有什么方法比‘重启‘更管用。步骤如下:

1.跳过认证启动

首先进入到容器中。

mysql是我的数据库名称。命令的意思是:

然后编辑mysql配置文件,使用vi终端编辑器

vi /etc/mysql/conf.d/docker.cnf

在docker.cnf文件下新增skip-grant-tables

然后保存退出。这样下次登录mysql就不用密码了。然后重新启动容器。

docker restart mysql

这一步要说下vi终端编辑器的工作模式。

编辑模式:按”i“进入,按esc退出编辑模式进入命令模式

命令模式:就是最开始的状态

末行模式:在命令模式下按“:”进入,末行模式输入wq就是保存退出(w是write,q是quit)。q!是强制退出

2.重新设置密码

同第一样在进入mysql容器后,直接输入mysql就登录成功。

接着重新设置密码。

#使用mysql自带的mysql数据库。

use mysql;

#更改user表下的密码。

UPDATE user SET authentication_string = password ( 'a123456' ) WHERE User = 'root';

#刷新权限

flush privileges;

#退出

quit;

注意!!!这里有个坑,user表的密码的属性名是authentication_string

3.删除第一步的跳过认证启动

重新进入docker容器。在docker.cnf文件下删掉skip-grant-tables

4.重启mysql容器

再次重新启动后,就可以登录mysql。

2.外部拒绝访问问题解决

在mysql命令行下输入:

mysql> GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

Query OK, 0 rows affected (0.02 sec)

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

这里用户名和密码都是你自己的。另外说一下grant命令的解释:

grant 权限1,权限2, ... 权限n on 数据库名称.表名称 to 用户名@用户地址 identified by '连接口令';

权限1,权限2,... 权限n 代表 select、insert、update、delete、create、drop、index、alter、grant、references、reload、shutdown、process、file 等14个权限。

当权限1,权限2,... 权限n 被 all privileges 或者 all 代替时,表示赋予用户全部权限。

当 数据库名称.表名称 被 . 代替时,表示赋予用户操作服务器上所有数据库所有表的权限。

用户地址可以是localhost,也可以是IP地址、机器名和域名。也可以用 '%' 表示从任何地址连接。

'连接口令' 不能为空,否则创建失败。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值