Docker真实安装mysql8教程并优化配置

极简步骤如下

bash 复制代码
1.拉取镜像
docker pull mysql:8.0.36
2.查看镜像
docker images
3.创建宿主机所需文件夹
mkdir -p /opt/spider-hub/data/mysql/{conf,data,logs,mysql-files}
4.文件夹赋权
chmod -R 755 /opt/spider-hub/data/mysql
5.新增修改宿主机mysql配置,这样部署mysql后就可以直接使用
vim /opt/spider-hub/data/mysql/conf/my.cnf
6.修改完vim后
7.运行下方的docker命令就完成了mysql8部署
8.运行docker ps -a查看
9.恭喜完成

my.cnf如下

bash 复制代码
[client]
# 客户端通用字符集(适配所有客户端工具,8.0 兼容)
default-character-set=utf8mb4

[mysql]
# 客户端提示符(显示当前数据库,非常实用)
prompt = \\\u@\\\h [\\\d] >\

[mysqld]
# ========== 基础配置 ==========
server-id = 1
port = 3306
bind-address = 0.0.0.0
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid

# ========== 字符集 & 时区 ==========
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci  # 8.0 统一排序规则(5.7 改为 utf8mb4_unicode_ci)
skip-character-set-client-handshake
skip-name-resolve
init_connect='SET NAMES utf8mb4; SET collation_connection = utf8mb4_0900_ai_ci'  # 与 server 统一
default-time_zone = '+8:00'

# ========== 连接配置 ==========
max_connections = 300  # 适配 2G 容器内存
max_user_connections = 200  # 新增:单用户连接限制
max_connect_errors = 1000
wait_timeout = 600
interactive_timeout = 600
back_log = 128

# ========== 性能优化(核心) ==========
innodb_buffer_pool_size = 1G  # 2G 容器内存设 1G,按实际内存调整
innodb_buffer_pool_instances = 1
innodb_log_file_size = 256M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2  # 非核心业务 2;核心业务改为 1
innodb_flush_method = O_DIRECT  # 新增:跳过 OS 缓存,提升 IO
transaction_isolation = REPEATABLE-READ
lower_case_table_names = 1  # 仅首次启动生效!修改前需清空数据目录
innodb_strict_mode = 0

# ========== 日志配置 ==========
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 0
log_error = /var/log/mysql/error.log
general_log = 0
general_log_file = /var/log/mysql/general.log
# 新增 binlog 配置(生产必配)
log_bin = /var/lib/mysql/mysql-bin
binlog_format = ROW
binlog_expire_logs_seconds = 604800
max_binlog_size = 1G

# ========== 其他优化 ==========
tmp_table_size = 32M  # 降低临时表大小,避免 OOM
max_heap_table_size = 32M  # 与 tmp_table_size 一致
sort_buffer_size = 2M
join_buffer_size = 2M
open_files_limit = 65535
innodb_open_files = 65535

[mysqld_safe]
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid

docker命令如下

bash 复制代码
docker run -d \
--name mysql8 --restart=always --privileged=true \
-p 3306:3306  \
-e MYSQL_ROOT_PASSWORD=123123@Asd \
-e TZ=Asia/Shanghai \
-e MYSQL_DEFAULT_AUTH=mysql_native_password \
-e LANG=C.UTF-8 \
-v /opt/spider-hub/data/mysql/conf:/etc/mysql/conf.d \
-v /opt/spider-hub/data/mysql/data:/var/lib/mysql \
-v /opt/spider-hub/data/mysql/logs:/var/log/mysql \
-v /opt/spider-hub/data/mysql/mysql-files:/var/lib/mysql-files \
mysql:8.0.36
相关推荐
程序猿乐锅2 小时前
【MySQL | 第九篇】MySQL 存储过程
数据库·mysql
王小王-1232 小时前
基于深度学习的个性化音乐推荐系统的设计与开发
人工智能·深度学习·mysql·vue·推荐算法·个性化音乐推荐系统·音乐预测
十六年开源服务商3 小时前
2026社交媒体营销×WordPress运维:实战避坑指南
运维·媒体
半夜燃烧的香烟3 小时前
docker 安装minio nginx,配置nginx根据文根路由minio展示图片
java·nginx·docker
江南风月3 小时前
Hermes Agent 接入WGCLOUD实战:打造团队 AI 智能运维解决方案
运维·zabbix·运维开发·prometheus
xuefuhe3 小时前
MySQL8.4 tar.xz安装
mysql
黄焖鸡能干四碗3 小时前
软件系统概要设计说明书模版(Word)
大数据·运维·数据库·架构·需求分析
qiuziqiqi3 小时前
ocker-compose.yml 和Dockerfile 区别
运维·docker·容器
宇晨T3 小时前
BurpSuite实战:WackoPicko敏感目录探测
linux·运维·服务器