安装MySQL

MySQL简介

MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。

查找MySQL镜像

我们可以使用 docker search 镜像名称,命令来搜索镜像

docker search mysql

img

参数解释

搜索出来的有这么多镜像,怎么选择呢

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

根据参数,我们一般选择 官方发布的,并且stars多的。

下载镜像

可以使用docker pull 镜像名称来拉取镜像,我们选择了第一个Mysql的镜像,我们把它给拉取下来

docker pull mysql

img

注意事项
  • 如果不写版本号默认拉取最新的版本好latest
  • 拉取的时候是多个层一起拉取的,这样可用让其他镜像复用分层
  • 如果拉取的镜像不写仓库地址默认就是docker.io/library/

下载指定版本的镜像

我们上面下载的镜像不符合我们的预期,我们需要Mysql5.7的镜像

查找指定镜像

可以登录 https://hub.docker.com 地址搜索镜像

img

输入需要搜索的镜像名称,并选择对应镜像名称

img

选择tag标签,这个就是版本的信息

img

找到符合的版本 的mysql镜像,这里我们选择5.7.33

img

下载指定版本镜像

刚才我们已经找到了5.7.33版本的Mysql的镜像,我们使用docker pull命令下载,镜像后面跟的是tag也就是版本名称

docker pull mysql:5.7.34

img

我们发现,我们的新拉取的mysql镜像共用了 部分分层

查看镜像

安装完镜像后,我们需要看一下我们的本地镜像,使用docker images 可用查看本地镜像

docker images

img

这里有两个镜像,一个是最新版本的一个是我们刚才下载的5.7.33版本的

MySQL配置

配置MySQL忽略大小写

创建MySQL挂载目录,等会会解释什么是挂载路径

# 创建MySQL配置的文件夹
mkdir -p /tmp/etc/mysql
# 编辑my.cnf配置文件
vi /tmp/etc/mysql/my.cnf

配置MySQL忽略大小写,在我们创建的MySQL配置文件挂载点的目录的my.cnf文件加入如下内容

[mysqld]
lower_case_table_names=1
创建MySQL数据目录

因为默认MySQL启动后他的文件是在容器中的,如果我们删除容器,数据也将会消失,我们需要将数据挂载出来。

#创建mysql存储的目录
mkdir -p /tmp/data/mysql

启动MySql

使用docker run启动容器

docker run -d -p 3306:3306 -v /tmp/etc/mysql:/etc/mysql/mysql.conf.d/ -v /tmp/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.7.34

img

到这里MySQL已经后台运行了

参数解释
  • -d:是指容器后台运行,如果不加-d,当用户断开客户端时容器会结束运行
  • -p:将容器的3306端口映射到主机的3306端口,用来暴漏端口的
  • -v:这个命令是用来挂载目录的,将本地目录挂载到容器中,这样容器操作的就是本地目录
  • -e:这个命令是配置环境参数的,这里MYSQL_ROOT_PASSWORD=root指的是用root用户运行mysql,可以登录Docker容器通过ENV命令查看
  • –name:这个命令是配置Mysql的容器名称的,如果不配置,默认是随机生成的名字

检查MySQL运行状态

现在并不能确认MySQL的运行状态,我们需要去看下

查看容器运行状态

使用docker ps可以看到运行中的容器

docker ps

执行命令后,我们看到mysql的服务已经起来了

img

查看MySQL运行日志

现在MySQL容器起来了,并不代表MySQL已经成功启动,我们需要使用docker logs命令查看MySQL的日志

docker logs -f mysql

该命令可以查看容器日志-f是追踪打印日志,可以看到MySQL已经启动了

img

客户端连接MySQL

因为我们已经暴漏端口了,可以使用客户端工具连接MySQL

img

检查配置的大小写参数是否生效

SHOW VARIABLES LIKE '%case_table%';

img

查看容器挂载的配置文件

可以通过docker exec -ti mysql /bin/bash命令登录容器,检查挂载的配置文件情况

# 登录容器
docker exec -ti mysql /bin/bash

该命令含义是在mysql容器中以

img

我们可以看到我们修改的配置文件已经被挂载到了docker内部,这里面用到了exec命令,主要是在deocker容器中运行命令,下面我们介绍下

命令格式

主要是在deocker容器中运行命令

docker exec [options] container command [arg...]

命令参数

名称 简写 描述
–detach -d 后台运行模式,在后台执行命令相关命令
–detach-keys 覆盖容器后台运行的一些参数信息
–env -e 设置环境变量
–interactive -i 展示容器输入信息STDIN
–privileged 为命令提供一些扩展权限
–tty -t 命令行交互模式
–user -u 设置用户名(format: <name\ uid>[:<group\ gid>])
–workdir -w 指定容器内的目录
查看挂载的数据文件

可以看下挂载的数据文件是否存在

cd /tmp/data/mysql/ && ll

img

我们看到数据文件已经写入了

MySQL准备数据

MySql需要导入一些数据用来操作,我们用MySQL官方提供的数据库来操作

下载并导入数据
下载MySQL测试数据库

测试数据官网 下载数据库文件

img

直接导入无法导入,需要编辑employees.sql文件的一些地方

  1. set storage_engine = InnoDB;修改为: set default_storage_engine = InnoDB;
  2. select CONCAT('storage engine: ', @@storage_engine) as INFO;修改为:select CONCAT('storage engine: ', @@default_storage_engine) as INFO;
  .....
  set default_storage_engine  = InnoDB;
-- set storage_engine = MyISAM;
-- set storage_engine = Falcon;
-- set storage_engine = PBXT;
-- set storage_engine = Maria;

select CONCAT('storage engine: ',@@default_storage_engine) as INFO;
.....
导入测试数据

下载解压后,在本地执行命令导入到mysql服务器

mysql -uroot -h192.168.64.152 -p < employees.sql

img

客户端检查数据

在登陆客户端就能看到数据库以及表了

img