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
相关推荐
牛肉胡辣汤4 小时前
开源模型落地实战|开发、运维、安全各岗位 AI 应用经验分享
运维·安全·开源
万亿少女的梦1684 小时前
基于Spring Boot、Java与MySQL的同城宠物服务系统设计与实现
java·spring boot·mysql·系统设计·协同过滤
万亿少女的梦1684 小时前
基于Spring Boot、Vue与MySQL的私人健身教练预约管理系统设计
java·spring boot·mysql·vue·预约管理
布局呆星13 小时前
云服务器上部署单项目/多项目
运维·服务器
盐焗鹌鹑蛋13 小时前
【Linux】缓冲区
linux·运维·服务器
祈禾13 小时前
Redis三大缓存问题与分布式锁
运维·数据库·redis·笔记·分布式·缓存
灯澜忆梦14 小时前
【MySQL12】进阶篇 | SQL优化
数据库·sql·mysql·性能优化
ltl15 小时前
可观测性存储与成本:采样、下采样、冷热分层
运维
学代码的CJY16 小时前
Linux 库制作与原理:静态库、动态库、ELF 与动态链接完全指南
linux·运维·服务器
SatanII16 小时前
403 禁地:Nginx 拒绝所有生者进入
运维·nginx