功能说明
| 功能 |
描述 |
✅ 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: 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
|
⚠️ 注意:部分路径或语法可能因 MySQL 版本变化略有不同,确保 my.cnf 放在 /etc/mysql/conf.d/ 中以便自动加载。
手动备份示例命令
假设你已经把备份目录挂载为 /backup,手动备份可:
1 2
| docker exec mysql81 \ sh -c 'mysqldump -uroot -proot123 --all-databases > /backup/all.sql'
|
启动服务
检查状态
1 2 3
| docker ps docker logs -f mysql81 docker inspect --format='{{json .State.Health}}' mysql81
|