Skip to content

docker挂载部署mysql8.4.2

目录结构

shell
mkdir -p mysql/{logs,data,conf}
markdown
mysql/
├── docker-compose.yml
├── logs/
├── data/
├── conf/
│ └── my.cnf

docker-compose.yml

yaml
services:
  mysql:
    image: mysql:8.4.2  
    container_name: mysql  
    restart: unless-stopped     
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password  # 设置 root 用户密码
      MYSQL_DATABASE: my_database  # 可选:初始化时创建的数据库
      MYSQL_USER: app_user         # 可选:创建普通用户
      MYSQL_PASSWORD: user_password # 可选:普通用户的密码
      TZ: Asia/Shanghai            # 设置时区
    ports:
      - "3306:3306"  # 端口映射:宿主机端口:容器端口[citation:1]
    volumes:
      # 挂载自定义配置文件目录
      - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
      # 挂载数据目录以实现持久化
      - ./data:/var/lib/mysql
      # 可选:挂载日志目录
      - ./logs:/var/log/mysql

my.cnf

# ======================
# 客户端配置(连接MySQL时使用)
# ======================
[client]
port = 3306                          # 客户端连接端口(默认3306)
socket = /var/run/mysqld/mysqld.sock # Socket文件路径(用于本地连接)
default-character-set = utf8mb4      # 默认字符集(支持emoji表情)

# ======================
# MySQL客户端配置(mysql命令行工具)
# ======================
[mysql]
default-character-set = utf8mb4      # 客户端默认字符集
no-auto-rehash                       # 禁用自动重新解析(加速命令行启动)

# ======================
# MySQL服务端核心配置
# ======================
[mysqld]

# -------------------- 基础设置 --------------------
user = mysql                         # MySQL服务运行用户(安全起见,不要用root)
port = 3306                          # 服务监听端口
datadir = /var/lib/mysql             # 数据存储目录(Docker中必须与volume挂载路径一致)
socket = /var/run/mysqld/mysqld.sock # Socket文件路径(本地连接用)
pid-file = /var/run/mysqld/mysqld.pid # PID文件路径(用于进程管理)
character-set-server = utf8mb4       # 服务器默认字符集(必须设置!)
collation-server = utf8mb4_unicode_ci # 排序规则(支持多语言)
skip-name-resolve                    # 禁用DNS反向解析(提升连接速度,避免DNS延迟)

# -------------------- 连接设置 --------------------
max_connections = 1000               # 最大并发连接数(根据服务器资源调整)
max_connect_errors = 10000           # 允许的连接错误次数(防攻击)
back_log = 300                       # 连接请求队列长度
thread_cache_size = 64               # 线程缓存池大小(减少线程创建开销)
interactive_timeout = 28800          # 交互式连接超时时间(秒)
wait_timeout = 28800                 # 非交互式连接超时时间(秒)


# -------------------- 日志与监控 --------------------
log_error = /var/log/mysql/error.log # 错误日志路径
slow_query_log = 1                   # 启用慢查询日志
slow_query_log_file = /var/log/mysql/slow-query.log # 慢查询日志路径
long_query_time = 2                  # 慢查询阈值(秒)
log_queries_not_using_indexes = 1    # 不记录未使用索引的查询(建议设为1)
log_slow_admin_statements = 1        # 记录慢的管理语句(如ALTER)
log_throttle_queries_not_using_indexes = 60 # 未使用索引查询的节流间隔(秒)

# -------------------- 二进制日志 --------------------
server-id = 1                        # 服务器ID(主从复制必需)
log_bin = /var/log/mysql/mysql-bin.log # 二进制日志路径
binlog_format = ROW                  # 二进制日志格式(ROW安全,STATEMENT有风险)
binlog_expire_logs_seconds = 604800  # 二进制日志保留时间(7天)
max_binlog_size = 500M               # 单个二进制日志最大大小
binlog_cache_size = 1M               # 二进制日志缓存大小
sync_binlog = 1                      # 每次事务提交刷写二进制日志(最安全)

启动命令

shell
# 清空data和logs目录
rm -rf ./data/* ./logs/*

# 给权限
chmod -R 777 ./data ./logs

# 运行启动
docker-compose up -d
  • docker ps 查看容器状态
  • 在logs目录下error.log查看日志
/src/technology/dateblog/2025/11/20251128-docker%E6%8C%82%E8%BD%BD%E9%83%A8%E7%BD%B2mysql8-4-2.html