一、编写Dockerfile
FROM mysql:8.0.39
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
二、编写docker-compose.yml
version : '3.8'services:zaomeng-mysql:build:context: ./mysqlimage: mysql:8.0.39container_name: zaomeng-mysqlrestart: alwaysenvironment:- MYSQL_ROOT_PASSWORD=p@ssw0rd - MYSQL_ROOT_HOST=% - TZ=Asia/Shanghaiports:- 3306:3306 command: - --lower_case_table_names=1 - --character_set_server=utf8mb4 - --collation_server=utf8mb4_general_ci - --explicit_defaults_for_timestamp=true- --max_allowed_packet=128M- --default_authentication_plugin=mysql_native_password volumes:- ./mysql/conf/my.cnf:/etc/my.cnf- ./mysql/data:/var/lib/mysql- ./mysql/logs:/var/log/mysql
三、创建my.cnf
###### [client]配置模块 ######
[client]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock###### [mysql]配置模块 ######
[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock###### [mysqld]配置模块 ######
[mysqld]
port=3306
user=mysql
# 设置sql模式 sql_mode模式引起的分组查询出现*this is incompatible with sql_mode=only_full_group_by,这里最好剔除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id = 1# MySQL8 的密码认证插件 如果不设置低版本navicat无法连接
default_authentication_plugin=mysql_native_password# 禁用符号链接以防止各种安全风险
symbolic-links=0# 允许最大连接数
max_connections=1000# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB# 0: 表名将按指定方式存储,并且比较区分大小写;
# 1: 表名以小写形式存储在磁盘上,比较不区分大小写;
lower_case_table_names=0max_allowed_packet=128M# 设置时区
default-time_zone='+8:00'
四、启动
sudo docker-compose up -d