Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

1.下载Mysql镜像

不指定版本号,默认下载最新的版本:

[[email protected] ~]# docker pull mysql

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

也可以指定特定版本:

[[email protected] ~]# docker pull mysql:5.6.48

2.下载完毕,查看镜像信息情况

[[email protected] ~]# docker images

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

3.通过镜像,创建容器并设置端口和密码

[[email protected] ~]# docker run -p 3306:3306 --name Mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

上面Mysql01是自定义的容器名字,可以随便起,至于其他前面3306是运行端口号,后面123456是mysql的root密码,照此写即可,当然你也可以用其他密码,但千万要记住密码,后面还要用。

回车确定运行后显示一长串字母数字,即容器创建启动成功。

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

4.查看容器运行状态

[[email protected] ~]# docker ps -a

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

显示mysql已经运行。

但这就好了吗?还没,如果此时用Navicat连接一下报 1251:Client does not support authentication protocol requested  by server;consider upgrading MySQL client 错误,如下:

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

这是因为Mysql安装时候的密码加密方式不匹配,所以还要进入mysql重新修改密码。

5.进入docker刚安装的mysql中修改密码

直接进入docker中mysql容器:

[[email protected] ~]# docker exec -it Mysql01 bash

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

上面Mysql01是我上面第3步自定义起的mysql容器名字,具体看你自己情况

进入后:

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

选择root账号密码登录:

[email protected]:/# mysql -uroot -p

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

输入密码123456,linux默认不显示密码明文,直接输入回车确定即可登录。

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

后面操作较多,所有命令如下,参照下面逐行操作:

mysql> use mysql;

赋予任何主机访问数据的权限

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

刷新MySQL的系统权限相关表 

mysql> FLUSH PRIVILEGES; 

比较新版本的MySQL采用新的加密方式,我们重新修改密码,新密码依旧为123456:

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

再刷新MySQL的系统权限相关表

mysql> FLUSH PRIVILEGES;

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

以上操作完成后,再来连接Navicat,连接成功!就可以使用mysql了。

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

                                                                                                                                                                                                           

额外补充:有些同学反应在以上操作后,发现还是无法远程连接mysql,很可能是root账号指定的host限制问题,应该改为%符号。

Host指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。而%是个通配符,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为192.168.1.** 的客户端都可以连接。如果Host=%,表示所有IP都有连接权限。这也就是为什么在开启远程连接的时候,大部分人都直接把Host改成%的缘故。

修改办法:

查找用户host
mysql> select host, user from user;

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题

我这个地方已经是%符号无需修改,如果你的不是这样,如下操作:

mysql> update user set host='%' where user='root';

Docker教程大全(三):安装Mysql,并解决初次安装后连接报1251问题