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
運行即可!!!