在学习环境中 如何优雅地启动 mysql8 的 docker 镜像

前言

直接在 win10 上安装 mysql 其实不怎么优雅,毕竟要携带许多依赖环境。既然学了 docker,不用怎么行呢,接下来探讨如何用 docker 启动一个学习用的 mysql

环境准备

操作系统:win10
Docker版本:基于 wsl2 的 docker-desktop v19.03.13
docker-compose版本:1.27.4

目录结构

.
├── config
│ ├── master.cnf

├── mysql-volumes
│ ├── data
│ ├── logs
│ ├── conf
├── .env
└── docker-compose.yml

配置

  1. 修改 .env 文件

该文件为 docker-compose.yml 提供变量

1
2
3
4
5
6
7
8
# default environment arguments for docker-compose.yml
# set master volumes dir
MASTER_DATA=./mysql-volumes/data/master
MASTER_LOGS=./mysql-volumes/logs/master
MASTER_CONF=./mysql-volumes/conf/master

# set master root password
MASTER_PASSWD=P@ssw0rd
  • MASTER_DATA 是挂载到宿主机上的数据目录
  • MASTER_LOGS 是挂载到宿主机上的日志目录
  • MASTER_CONF 是挂载到宿主机上的配置目录
  1. 修改 mysql 配置文件 master.cnf
1
2
3
4
5
6
7
8
9
10
[mysqld]
max_connections = 2000
default-time_zone='+8:00'

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

default_authentication_plugin = 'mysql_native_password' #更改加密方式

[client]
default-character-set = utf8mb4

修改完后,放在容器挂载的配置目录中,并设置成只读./mysql-volumes/conf/master/master.cnf

  1. 配置 docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
version: '3'
services:
mysql:
image: registry.cn-shenzhen.aliyuncs.com/sugaral/mysql:8.0.20 # 自行选择 mysql 镜像
container_name: mysql
ports:
- 3306:3306

environment:
MYSQL_ROOT_PASSWORD: ${MASTER_PASSWD}
MYSQL_DATABASE: my_db_1
MYSQL_USER: sugar # mysql 默认已有 root 用户,该属性是创建一个 root 以外的新用户
MYSQL_PASSWORD: ${MASTER_PASSWD}
#MYSQL_ROOT_HOST: '%' # 远程连接通配符白名单,仅限本机使用则无需开启


command:
# yml 注释反人类,真的反人类,别吐槽注释位置
# 为了防止出现同时存在大小写库表,这里设置表名在磁盘里以小写存储,只能配置在启动项里
# 除了表明大小写设置外,后续的既可以配置在启动项,也能配置在 .cnf 文件中
# 旧客户端不支持新的用户认证方式,为了照顾它们这里修改为旧方式密码加密
# 默认的 timestamp 规则让人挠头,而且不同版本也不一样,这个选项让 timestamp 重归正常,和其他数据类型一样使用,如 dateTime
--lower_case_table_names=1
--default-authentication-plugin=mysql_native_password
--character_set_server=utf8mb4
--collation-server=utf8mb4_general_ci

volumes:
- ${MASTER_DATA}:/var/lib/mysql
- ${MASTER_CONF}:/etc/mysql/conf.d
- ${MASTER_LOGS}:/var/log/mysql

启动

在 docker-compose.yml 文件夹下进入 powershell

然后使用命令 docker-compose up 启动 mysql

通过界面应用或者 docker 命令行可以进入容器内部调试 mysql

以下是一些方便调试的 sql 语句:

  1. 查看 mysql 编码设置
1
show variables like 'char%'
  1. 获取 mysql 数据存储目录
1
show variables like '%data%';
  1. 查看数据库表名大小写敏感状态
1
show global variables like '%lower_case%';