Docker部署MySQL镜像

1.拉取镜像

powershell 复制代码
# 拉取指定版本的MySQL镜像
docker pull mysql:8.0

2.创建挂载目录

powershell 复制代码
# 自己创建好如下三个文件夹 路径任意
[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

powershell 复制代码
[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

更多可选配置

powershell 复制代码
[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运行命令

powershell 复制代码
# 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 

运行即可!!!

相关推荐
一只叫煤球的猫8 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz9658 小时前
tcp/ip 中的多路复用
后端
bobz9658 小时前
tls ingress 简单记录
后端
你的人类朋友9 小时前
什么是OpenSSL
后端·安全·程序员
bobz96510 小时前
mcp 直接操作浏览器
后端
程序新视界10 小时前
MySQL中什么是回表查询,如何避免和优化?
mysql
前端小张同学12 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook12 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康13 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在13 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net