增强版的MySQL 8.1 docker-compose.yml

功能说明

功能 描述
healthcheck 用于容器健康检查,配合 restart 策略自动恢复
✅ 日志挂载 容器日志输出至宿主机,便于排查
✅ 资源限制 限制容器 CPU/内存资源,避免资源耗尽
✅ 数据备份挂载 宿主挂载 /backup,便于定期备份数据
✅ 自定义 my.cnf 可选:添加自定义配置文件支持(字符集、连接数等)

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
version: "3.8"

services:
mysql:
image: mysql:8.1
container_name: mysql81
environment:
MYSQL_ROOT_PASSWORD: root123
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql # 数据持久化
- ./logs:/var/log/mysql # 日志挂载
- ./backup:/backup # 备份目录挂载(你可放备份脚本)
- ./my.cnf:/etc/mysql/conf.d/my.cnf # 可选:自定义配置
restart: unless-stopped

healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot123"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s

deploy: # 仅在 Docker Swarm 或支持的 compose 环境生效
resources:
limits:
cpus: '1.00'
memory: 512M
reservations:
cpus: '0.50'
memory: 256M

volumes:
mysql_data:

数据目录权限

chown -R 999:999 /path/to/your/mysql/data

MySQL 8.0+ 的默认运行用户是 UID 999(Debian-based 镜像)

自定义配置 my.cnf

如需设置字符集、连接数等,可添加文件 ./my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 2000
log-error = /var/log/mysql/mysql-error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
lower_case_table_names = 1
default-authentication-plugin = mysql_native_password

#default-authentication-plugin = caching_sha2_password

⚠️ 注意:部分路径或语法可能因 MySQL 版本变化略有不同,确保 my.cnf 放在 /etc/mysql/conf.d/ 中以便自动加载。


手动备份示例命令

假设你已经把备份目录挂载为 /backup,手动备份可:

1
2
docker exec mysql81 \
sh -c 'mysqldump -uroot -proot123 --all-databases > /backup/all.sql'

启动服务

1
docker-compose up -d

检查状态

1
2
3
docker ps
docker logs -f mysql81
docker inspect --format='{{json .State.Health}}' mysql81