(一)引言
MySQL是开源数据库。凭借其可靠性、易用性和性能,MySQL已成为Web应用程序的数据库优先选择。
(二)docker搭建Mysql 1、查看可用的 MySQL 版本访问MySQL镜像库地址:Docker Hub 。
此外,我们还可以用 docker search mysql 命令来查看可用版本:
[root@icoolkj ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 12687 [OK] mariadb MariaDB Server is a high performing open sou… 4864 [OK] percona Percona Server is a fork of the MySQL relati… 579 [OK] ... [root@icoolkj ~]#2、拉取 MySQL 镜像
这里拉取官方的最新版本的镜像:
[root@icoolkj ~]# docker pull mysql:latest
3、查看本地镜像
使用以下命令来查看本地镜像:
[root@icoolkj ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest 65b636d5542b 8 days ago 524MB sonatype/nexus3 latest aab1398bb647 2 weeks ago 705MB [root@icoolkj ~]#
REPOSITORY:来自哪一个仓库,比如ubuntu仓库
TAG:镜像的标签信息,最新的
IMAGE ID:镜像的id号:这个是唯一的
CREATED:镜像创建时间
SIZE:镜像大小
在上图中可以看到我们已经拉取最新版本(latest)的 mysql 镜像。
4、运行容器(建立目录映射)docker run -p 3306:3306 --name mysql-test -v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files -v /usr/local/docker/mysql/conf:/etc/mysql -v /usr/local/docker/mysql/logs:/var/log/mysql -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest5、安装成功
通过docker ps命令查看是否安装成功:
[root@icoolkj ~]# docker ps
可以看到容器ID,容器的源镜像,启动命令,创建时间,状态,端口映射信息,容器名字
(三)连接mysql 1、进入docker本地连接mysql服务## 进入mysql容器 [root@icoolkj ~]# docker exec -it ecc75bf3bd65 /bin/bash ## 访问mysql服务 root@ecc75bf3bd65:/# mysql -h localhost -u root -p1234562、使用远程连接软件连接mysql服务 (四)问题处理 1、问题一 a)问题描述
在使用Docker部署 mysql8.0 并登录用户的时候报错:
Access denied for user 'root'@'localhost' (using password: YES)
b)问题分析处理Access denied : 拒接访问数据库
using password: YES : YES 表示密码输入正确 / 当NO 时表示密码错误
其中最大的原因就是因为密码输入不正确,请认真检查输入的密码是否与容器启动时设置的是否一致。
如果确认明文密码是正确的,请参考如下解决:
通过Docker启动命令设置了root的密码(MYSQL_ROOT_PASSWORD=123456),但是登录的时候一直显示错误(Access denied for user ‘root’@‘localhost’ (using password: YES))。
如果确认明文密码是正确的,原因有可能是mysql8.0使用的默认加密插件是 caching_sha2_password 而非5.6的 mysql_native_password,当你在控制台使用明文密码登录的时候走的是mysql_native_password加密,而数据库记录的是caching_sha2_password加密后的密码,匹配自然不正确。
#my.cnf 文件的存放路径根据自己需求自定义即可 vim /usr/local/docker/mysql/conf/my.cnf #编辑内容 在vi编辑器中输入以下内容 [mysqld] default_authentication_plugin=mysql_native_password #保存并退出vi编辑器 #停止早期mysql容器,重新启动 docker run -p 3306:3306 --name mysql-test -v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files -v /usr/local/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/docker/mysql/logs:/var/log/mysql -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest2、问题二 a)问题描述
容器运行正常,本地客户端可以访问,但是远程无法访问到MySQL。
b)问题分析处理
需要进入docker本地客户端设置远程访问账号。
## 进入mysql容器 [root@icoolkj ~]# docker exec -it d5223c1f0afc bash ## 进入mysql root@d5223c1f0afc:/# mysql -uroot ## 打开mysql库 mysql> use mysql ## 允许使用root账户连接的ip为任意 mysql> update user set host='%' where user='root'; ## 刷新权限 mysql> flush privileges; mysql> ## 如果前面步骤没有报错且刷新权限了还是不可以远程连接,就重新启动数据库。3、问题三 a)问题描述
进入Navicat连接MySQL出现下面的2059界面。
b)问题分析处理mysql8之前版本中加密规则为mysql_native_password,mysql8以后的加密规则为caching_sha2_password,将mysql用户登录加密规则修改为mysql_native_password即可!
mysql> use mysql; mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; mysql> flush privileges;



