docker compose部署mysql
以下是使用 Docker Compose 部署 MySQL 的完整方案,包含最佳实践配置:
1. 创建 docker-compose.yml
文件
version: '3.8'services:mysql:image: mysql:8.0.34 # 建议指定具体版本container_name: mysql-serverenvironment:MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-StrongPassword123!} # 从环境变量读取,默认值作为后备MYSQL_DATABASE: ${DB_NAME:-myapp_db}MYSQL_USER: ${DB_USER:-app_user}MYSQL_PASSWORD: ${DB_PASSWORD:-UserPassword123!}TZ: Asia/Shanghai # 设置时区ports:- "${DB_PORT:-3306}:3306"volumes:- mysql_data:/var/lib/mysql- ./mysql/conf.d:/etc/mysql/conf.d # 自定义配置- ./mysql/initdb:/docker-entrypoint-initdb.d # 初始化SQL脚本healthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]interval: 10stimeout: 5sretries: 3restart: unless-stoppednetworks:- backend-networkcommand: --character-set-server=utf8mb4--collation-server=utf8mb4_unicode_ci--max_connections=200--default-authentication-plugin=mysql_native_passwordvolumes:mysql_data: # 命名卷实现数据持久化networks:backend-network:driver: bridge
2. 创建配置文件目录结构
mkdir -p {mysql/conf.d,mysql/initdb}
3. 添加自定义配置 (可选)
在 mysql/conf.d/my-custom.cnf
中添加:
[mysqld]
skip-name-resolve
innodb_buffer_pool_size = 256M
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
4. 添加初始化脚本 (可选)
在 mysql/initdb/01-create-tables.sql
中添加:
CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
5. 使用环境变量文件 (推荐)
创建 .env
文件:
# MySQL 配置
DB_ROOT_PASSWORD=YourSecureRootPassword
DB_NAME=production_db
DB_USER=admin_user
DB_PASSWORD=Admin@1234
DB_PORT=3307 # 避免与宿主机MySQL冲突
6. 启动服务
docker-compose up -d # 后台启动
7. 管理命令
# 查看日志
docker-compose logs -f mysql# 进入容器
docker-compose exec mysql bash# 连接MySQL
docker-compose exec mysql mysql -u root -p# 安全关闭
docker-compose down --volumes # 警告:这会删除数据卷
8. 备份方案
创建 backup.sh
脚本:
#!/bin/bash
BACKUP_DIR=/path/to/backups
DATE=$(date +%Y%m%d_%H%M%S)docker-compose exec -T mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > $BACKUP_DIR/full_backup_$DATE.sql
高级功能扩展
- 主从复制配置:可扩展为多节点集群
- 监控集成:添加Prometheus监控
- PHPMyAdmin:添加管理界面服务
- 连接池:配合ProxySQL使用
💡 提示:生产环境建议使用 secrets 管理密码,可通过
docker-compose secrets
配置