1.拉取镜像
# 拉取指定版本的MySQL镜像
docker pull mysql:8.0
2.创建挂载目录
# 自己创建好如下三个文件夹 路径任意
[root@iZuf6aigs7rxe6f6oifq7vZ mysql]# ll
总用量 12
drwxr-xr-x 2 root root 4096 7月 7 10:25 config
drwxr-xr-x 2 root root 4096 6月 26 16:43 data
drwxr-xr-x 2 root root 4096 6月 26 17:15 log
3.创建配置文件my.cnf
[client]
# 客户端默认字符集
default-character-set=utf8mb4
[mysql]
# 设置服务器默认字符集
default-character-set=utf8mb4
# 设置校验规则
collation-server=utf8mb4_general_ci
# 连接字符集
init_connect = 'SET NAMES utf8mb4'[mysqld]
server-id = 1
port = 3306
default-storage-engine = InnoDB
# 允许最大的连接数
max_connections=1000
# 解决8.0版本 GROUP BY问题
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
# 设置东八区时区
default-time_zone = '+8:00'# 最大错误连接数(达到后阻止主机连接)
max_connect_errors = 100
# 连接超时时间(秒)
connect_timeout = 60
更多可选配置
[client]
# 客户端默认字符集
default-character-set = utf8mb4[mysql]
# MySQL命令行客户端默认字符集
default-character-set = utf8mb4[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 服务器唯一ID(主从复制时需要)
server-id = 1
# 服务端口
port = 3306
# 数据目录
datadir = /var/lib/mysql
# socket文件位置
socket = /var/run/mysqld/mysqld.sock
# 错误日志位置
log-error = /var/log/mysql/error.log
# 进程ID文件位置
pid-file = /var/run/mysqld/mysqld.pid
# 默认存储引擎
default-storage-engine = InnoDB
# 默认认证插件(兼容旧版客户端)
default_authentication_plugin = mysql_native_password
# 跳过名称解析(提高连接速度)
skip-name-resolve### 字符集设置 ###
# 服务器默认字符集
character-set-server = utf8mb4
# 服务器默认排序规则
collation-server = utf8mb4_0900_ai_ci
# 连接字符集
init_connect = 'SET NAMES utf8mb4'### 连接设置 ###
# 最大连接数(根据业务需求调整)
max_connections = 1000
# 最大错误连接数(达到后阻止主机连接)
max_connect_errors = 100
# 连接超时时间(秒)
connect_timeout = 10
# 交互式连接超时(秒)
interactive_timeout = 28800
# 非交互式连接超时(秒)
wait_timeout = 28800### 内存设置 ###
# 每个连接的缓冲区大小
sort_buffer_size = 4M
# 每个连接的读缓冲区大小
read_buffer_size = 2M
# 每个连接的随机读缓冲区大小
read_rnd_buffer_size = 8M
# 连接线程缓冲区大小
join_buffer_size = 8M
# 线程堆栈大小
thread_stack = 256K
# 临时表内存大小
tmp_table_size = 64M
# 内存临时表最大值
max_heap_table_size = 64M### InnoDB设置 ###
# InnoDB缓冲池大小(建议为物理内存的50-70%)
innodb_buffer_pool_size = 2G
# InnoDB缓冲池实例数(每个1GB左右)
innodb_buffer_pool_instances = 2
# InnoDB日志文件大小(建议256M-2G)
innodb_log_file_size = 512M
# InnoDB日志缓冲区大小
innodb_log_buffer_size = 16M
# InnoDB刷新日志方式(O_DIRECT避免双缓冲)
innodb_flush_method = O_DIRECT
# InnoDB事务提交方式(1最安全但最慢,2折中,0最快但不安全)
innodb_flush_log_at_trx_commit = 1
# InnoDB IO线程数
innodb_read_io_threads = 4
innodb_write_io_threads = 4
# InnoDB死锁检测
innodb_deadlock_detect = ON
# InnoDB锁等待超时(秒)
innodb_lock_wait_timeout = 50
# InnoDB严格模式
innodb_strict_mode = ON### 日志设置 ###
# 慢查询日志
slow_query_log = 1
# 慢查询日志文件位置
slow_query_log_file = /var/log/mysql/mysql-slow.log
# 慢查询阈值(秒)
long_query_time = 2
# 记录未使用索引的查询
log_queries_not_using_indexes = 1
# 二进制日志格式(ROW格式最安全)
binlog_format = ROW
# 二进制日志过期天数
expire_logs_days = 7
# 二进制日志大小
max_binlog_size = 100M### 安全设置 ###
# 禁止LOAD DATA LOCAL INFILE(防止安全风险)
local_infile = 0
# 禁止符号链接
symbolic-links = 0
# 密码验证策略
validate_password.policy = MEDIUM
# 密码最小长度
validate_password.length = 8
# 密码混合大小写要求
validate_password.mixed_case_count = 1
# 密码数字要求
validate_password.number_count = 1
# 密码特殊字符要求
validate_password.special_char_count = 1
# 禁止旧密码认证
secure_auth = ON### 其他优化 ###
# 表定义缓存
table_open_cache = 2000
# 表定义缓存实例数
table_definition_cache = 1400
# 打开文件限制
open_files_limit = 65535
# 最大允许数据包大小
max_allowed_packet = 64M
# 批量插入缓冲区大小
bulk_insert_buffer_size = 16M
# 线程缓存大小
thread_cache_size = 100
# 主机名缓存大小
host_cache_size = 300
4.docker运行命令
# mysql 配置文件位置
# /kiki/mysql/config
# /kiki/mysql/data
# /kiki/mysql/log# -d 后台运行
# --name 容器名称
# --privileged=true 赋予容器特权模式(访问主机所有设备)
# --restart=always 容器退出时自动重启(除非明确停止)
# -p 3306:3306 将主机的 3310 端口映射到容器的 3306 端口(MySQL 默认端口)
# -v /innomind/mysql/data:/var/lib/mysql 挂载数据目录
# -v /innomind/mysql/config:/etc/mysql/conf.d 挂载配置文件目录
# -v /innomind/mysql/log:/logs 挂载日志目录
# -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL root 用户密码为 "123456"
# -e TZ=Asia/Shanghai:设置时区为亚洲/上海
# --lower_case_table_names=1:设置表名存储为小写(1 表示不区分大小写)
# mysql:8.0 指定要运行的镜像和版本docker run -d \
--name mysql8 \
--privileged=true \
--restart=always \
-p 3306:3306 \
-v /kiki/mysql/data:/var/lib/mysql \
-v /kiki/mysql/config:/etc/mysql/conf.d \
-v /kiki/mysql/log:/logs \
-e MYSQL_ROOT_PASSWORD=123456\
-e TZ=Asia/Shanghai mysql:8.0 \
--lower_case_table_names=1
运行即可!!!