用docker容器跑的mysql5.6一直好好的,今天用navicat链接突然报错:1045 - Access denied for user 'root'@'127.0.0.1' (using password:YES)

看报错是没有root用户的登录权限。 

          首先查看挂载的volumn对应的mysql的配置文件目录是否为空。如果为空可能就把mysql的配置文件也同步为空了。mysql配置目录:/etc/mysql/conf.d,尤其注意查看 my.ini 配置文件是否少了。查看到少了配置文件需要恢复mysql的配置文件,或者干脆重新run一个容器,注意volumn到mysql的配置文件不要为空。

如果配置文件是正确的。就往下看root用户登录ip的限制是否正确:

第一步

登录mysql,命令:mysql -h localhost -u root -p

然后输入密码

登录成功。

第二步

使用mysql数据库

mysql> use mysql;

输入sql:

mysql> select host, user from user;

显示:

mysql> select host, user from user;
+--------------+--------+
| host         | user   |
+--------------+--------+
| %            | admina |
| %            | mysqld |
| %            | server |
| 118.25.53.252| root   |
+--------------+--------+
4 rows in set (0.00 sec)

这里显示的是哪些ip拥有user的登录权限。上面root的登录权限限定了只有一个ip能登录,需要添加更多的ip登录。

第三步

这里用关键的一条sql加上,我这里是测试环境为了方便,就把host写为%代表所有ip皆可用root用户登录,若是生产环境注意把host写成限制的ip地址,youpassword代表root用户的登录密码

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

再用刚才的select host, user from user;查看显然多了一条:

mysql> select host, user from user;
+--------------+--------+
| host         | user   |
+--------------+--------+
| %            | admina |
| %            | mysqld |
| %            | server |
| %            | root   |
| 118.25.53.252| root   |
+--------------+--------+
5 rows in set (0.00 sec)

第四步

使用命令“flush privileges;”,保存授权名单。

最后就可以成功登录了

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐