Docker安装Mysql5.7---报错 ERROR 1045 (28000): Access denied for user

Docker安装Mysql5.7---报错 ERROR 1045 (28000): Access denied for user

Scroll Down

引言

在部署一个项目时,需要用到Mysql,为了方便起见,决定使用Docker来安装Mysql,但是在登陆Mysql时遇到了一个错误.

”Access denied for user ‘root’@’localhost’ (using password: YES)”

正文

原因:进入mysql报错:1045(28000), 原因:mysql5.7 首次安装后,需要修改root的默认密码才能使用

安装步骤

1.拉去Mysql镜像

docker pull mysql:5.7

2.创建挂载目录

mkdir /usr/local/mysql/data  #用于挂载Mysql数据文件
mkdir /usr/local/mysql/conf.d  #用于挂载mysql配置文件

3.启动容器

docker run -d -p 3306:3306  
-v /usr/local/mysql/conf.d:/etc/mysql/conf.d 
-v /usr/local/mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=YOURPASSWORD 
--name mysql mysql:5.7 
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

-d:后台运行
-v:目录映射
-p:端口映射
-e:设置默认密码,但是我设置了这个参数还是无法登陆,所以才有了后面的解决办法,如果能够设置了能够成功登陆的话那最好。后面的是为了解决不知道root密码的情况下的操作,所以这个参数可加可不加

处理Mysql 1045错误

利用初始化容器时产生的root随机密码

从log中获取密码

上面的docker run命令中使用的-d选项使容器 run 在后台运行。使用此命令监视容器的输出:

docker logs mysql  #容器名

初始化完成后,命令的输出将包含为 root 用户生成的随机密码;检查密码,此命令:

docker logs mysql 2>&1 | grep GENERATED

从Contanier内连接到Mysql服务器

docker exec -it mysql bash  #进入容器并在内部使用shell
mysql  -uroot -p  #进入Mysql,输入在log中找到的密码登陆
#重置root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES; 

重启容器之后便可以使用设定好的密码登陆了,可以根据是否需要远程连接Mysql数据库更改root用户的连接权限

#利用先前的命令先进入mysql,再使用以下命令
use mysql; #选择数据库
#查看用户信息
select host, user, authentication_string, plugin from user;
#设置root为任意host连接
update user set host = "%" where user='root';
flush privileges;  #刷新

跳过认证

1.在/usr/local/mysql/conf.d目录下增加文件:my.cnf
文件内容为

[mysqld]
skip-grant-tables

2.重启Mysql

docker restart mysql

3.进入容器中并登陆Mysql

docker exec -it mysql bash
mysql -uroot -p   #此时是直接可以登陆的

4.设置root密码为空

use mysql;
select user,authentication_string,host from user;
update user set authentication_string='' where user='root';
flush privileges;

5.退出容器,把第一步的skip-grant-tables注释。再重启Mysql容器
6.使用 root用户,密码 回车键登录;
7.修改root密码

alter user 'root'@'localhost' IDENTIFIED BY 'password';
update user set host = "%" where user='root';
flush privileges;

修改root密码并设置任意主机连接完成。