@ghimi
2018-08-02T07:04:11.000000Z
字数 1656
阅读 862
docker
mysql
通过 Docker 客户端搜索Mysql 镜像
docker search mysql
获得当前的全部 Mysql 镜像列表:
NAME | DESCRIPTION | STARS | OFFICIAL | AUTOMATED |
---|---|---|---|---|
mysql | MySQL is a widely used, open-source relation | 6567 | [OK] | |
mariadb | MariaDB is a community-developed fork of MyS | 2075 | [OK] | |
mysql/mysql-server | Optimized MySQL Server Docker images. Create | 482 | [OK] | |
percona | Percona Server is a fork of the MySQL relati | 350 | [OK] | |
zabbix/zabbix-server-mysql | Zabbix Server with MySQL database support | 106 | [OK] |
然后根据列表拉取最新的MySQL镜像:
docker pull mysql
拉取完成后使用命令通过镜像生成容器并运行
docker run --name mysql -p 12345:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
--name mysql
表示容器的名称为mysql -p 12345::3306
表示将容器内部的端口3306绑定到外部docker虚拟机的12345端口上面-e MYSQL_ROOT_PASSWORD=123456
设置root用户的密码为123456-d
表示容器以后台的方式运行mysql
基于mysql这个镜像运行最新版本的 mysql 在密码方面发生了较大改动,如果远端直接使用端口访问的话会报一个错误:
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: 找不到指定的模块。
从网上找到了相关的原因:
在mysql5.7环境里,虽然可以设置
default_authentication_plugin
来改变认证加密方式,但是一般人不会去设置.在mysql8.0下,默认变成了default_authentication_plugin=caching_sha2_password
,包括你刚初始化的root用户也是这个认证加密方式,这样的结果是让你除非用新的协议驱动,例如必须用8.0自带的mysql客户端才行,不然就连接不上数据库.这样就必然造成不兼容的情况,幸好,是可以改回旧的方式的.
简单来说就是你使用的是mysql8.0的服务,但是却用mysql5.7的客户端去访问,由于mysql8.0在密码插件方面做了部分改动,导致使用mysql5.7的版本直接去访问时会报错.要想正常访问,需要做如下配置:
1.进入mysql容器
docker exec -it mysql /bin/bash
2.进入mysql
mysql -uroot -p123456
3.修改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
4.刷新权限
FLUSH PRIVILEGES; #刷新权限
通俗点来讲就是需要修改mysql对root用户的加密规则,下面还有一种方法可以做到,但是较上面的方法复杂了一点. 之前的步骤还是需要进入 mysql 容器中的mysql客户端:
处理:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码
FLUSH PRIVILEGES; #刷新权限
再重置下密码:alter user 'root'@'localhost' identified by '123qwe';