docker挂载部署mysql8.4.2
目录结构
shell
mkdir -p mysql/{logs,data,conf}markdown
mysql/
├── docker-compose.yml
├── logs/
├── data/
├── conf/
│ └── my.cnfdocker-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/mysqlmy.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查看日志