文章目录


1、使用 Docker 搭建 MySQL 环境

(1)搜索镜像

我只想安装MySQL5.7的版本,所以需要确定版本,在​​Docker Hub上搜索MySQL​

【Docker学习】5、使用 Docker 搭建 MySQL5.7、MySQL8.0 环境_远程连接

(2)拉取镜像

从上图得到对应版本的命令为

docker pull mysql:5.7.31

【Docker学习】5、使用 Docker 搭建 MySQL5.7、MySQL8.0 环境_mysql_02

(3)启动镜像

docker run -p 3306:3306 --name mysql \
-v /tellsea/docker/mysql/conf:/etc/mysql/conf.d \
-v /tellsea/docker/mysql/logs:/logs \
-v /tellsea/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.31

-v: 将指定目录挂载到容器的对应目录

【Docker学习】5、使用 Docker 搭建 MySQL5.7、MySQL8.0 环境_docker_03

(4)远程连接MySQL

进入MySQL容器

docker exec -it d2ea033d67be /bin/bash

登录MySQL,密码123456

mysql -u root -p

【Docker学习】5、使用 Docker 搭建 MySQL5.7、MySQL8.0 环境_mysql_04

远程连接成功!

【Docker学习】5、使用 Docker 搭建 MySQL5.7、MySQL8.0 环境_docker_05

2、使用 Docker 搭建 MySQL8 环境

(1)安装命令

上面的5.7过程已经很详细了,我这里就直接粘贴命令,简单的说明干什么的就可以了

下载镜像

docker pull mysql:8.0.22

运行容器

docker run -p 3306:3306 --name mysql8 \
-v /tellsea/docker/mysql8/conf:/etc/mysql/conf.d \
-v /tellsea/docker/mysql8/logs:/logs \
-v /tellsea/docker/mysql8/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.22

(2)远程连接报错

远程连接MySQL8.0报错,我们需要修改配置

MySQL8.0之前的版本密码加密规则:mysql_native_password

MySQL8.0密码加密规则:caching_sha2_password

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

再次设置密码

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


mysql更新到8.0之后,使用Navicat和SQLyog链接时都会出错,是因为MySql 8.0.11 换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)。而客户端工具找不到新的身份验证插件(caching_sha2_password),对此,我们将mysql用户使用的 登录密码加密规则 还原成 mysql_native_password,即可登陆成功。


(3)group by 语句报错

接下来,发现项目中使用 group by 报错,我们继续修改配置,/etc/mysql/my.cnf,在最后增加一行配置

docker exec -it mysql8 /bin/bash

进入容器后,没有vim命令,装一下

apt-get update
apt-get install vim
vi /etc/mysql/my.cnf

在[mysqld]下增加配置

sql_mode ='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

重启OK

docker restart mysql8

微信公众号

【Docker学习】5、使用 Docker 搭建 MySQL5.7、MySQL8.0 环境_docker_06