拉取镜像
docker pull mysql:5.7
创建目录
mkdir -p /nodn/docker/mysql/data
mkdir -p /nodn/docker/mysql/config
在config中创建 mysqld.cnf 文件
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
lower_case_table_names=1
#lower_case_table_names: 此参数不可以动态修改,必须重启数据库
#lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
#lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
#ower_case_table_names=2, 表名存储为给定的大小写但是比较的时候是小写的
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启
启动容器
docker run \
--privileged=true \
--restart=always \
--name mysql5.7 \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=562100 \
-v /nodn/docker/mysql/data:/var/lib/mysql \
-v /nodn/docker/mysql/config:/etc/mysql/conf.d \
-v /nodn/docker/mysql/logs:/var/log/mysql \
-d mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci \
--default-time_zone='+8:00'
参数说明:
--lower_case_table_names=1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写,如果配置文件里有写,就不用写
--restart=always 当 Docker 重启时,容器自动启动
--name mysql5.7 起别名
-p 3306:3306 映射端口
d mysql:5.7 指定运行版本
-e MYSQL_ROOT_PASSWORD="123456": 设置root用户密码
--character-set-server=utf8mb4: 设置字符集为utf8mb4
--collation-server=utf8mb4_unicode_ci: 设置字符比较规则为utf8mb4_unicode_ci
--privileged=true 获取宿主机的root权限
-v 目录挂载
数据挂载,挂载的目的是为了 当docker重启或者docker中的MySQL 容器删除后,里面的表和数据会丢失,所以把数据文件和配置文件挂载到宿机上,
经测试,如果这次挂载的是5.7版本的mysql,删除容器后换别的版本的mysql 想使用之前的挂载数据,docker中的MySQL 起不来