1.下载Mysql镜像
不指定版本号,默认下载最新的版本:
[root@localhost ~]# docker pull mysql
也可以指定特定版本:
[root@localhost ~]# docker pull mysql:5.6.48
2.下载完毕,查看镜像信息情况
[root@localhost ~]# docker images
3.通过镜像,创建容器并设置端口和密码
[root@localhost ~]# docker run -p 3306:3306 --name Mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
上面Mysql01是自定义的容器名字,可以随便起,至于其他前面3306是运行端口号,后面123456是mysql的root密码,照此写即可,当然你也可以用其他密码,但千万要记住密码,后面还要用。
回车确定运行后显示一长串字母数字,即容器创建启动成功。
4.查看容器运行状态
[root@localhost ~]# docker ps -a
显示mysql已经运行。
但这就好了吗?还没,如果此时用Navicat连接一下报 1251:Client does not support authentication protocol requested by server;consider upgrading MySQL client 错误,如下:
这是因为Mysql安装时候的密码加密方式不匹配,所以还要进入mysql重新修改密码。
5.进入docker刚安装的mysql中修改密码
直接进入docker中mysql容器:
[root@localhost ~]# docker exec -it Mysql01 bash
上面Mysql01是我上面第3步自定义起的mysql容器名字,具体看你自己情况
进入后:
选择root账号密码登录:
root@bd6719c88477:/# mysql -uroot -p
输入密码123456,linux默认不显示密码明文,直接输入回车确定即可登录。
后面操作较多,所有命令如下,参照下面逐行操作:
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;
以上操作完成后,再来连接Navicat,连接成功!就可以使用mysql了。
额外补充:有些同学反应在以上操作后,发现还是无法远程连接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;
我这个地方已经是%符号无需修改,如果你的不是这样,如下操作:
mysql> update user set host='%' where user='root';