MySQL Docker开发环境配置指南
Posted on Tue 19 March 2024 in 开发工具
如何使用Docker启动MySQL开发环境
目录结构
MySQL_Docker/
├── docker-compose.yml # Docker Compose 配置文件
├── .env # 环境变量配置
├── config/
│ └── my.cnf # MySQL 配置文件
├── data/ # MySQL 数据目录 (挂载)
└── logs/ # MySQL 日志目录 (挂载)
配置文件说明
1. docker-compose.yml 配置要点
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql-server
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
MYSQL_DATABASE: ${MYSQL_DATABASE:-testdb}
MYSQL_USER: ${MYSQL_USER:-testuser}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-testpass}
ports:
- "${MYSQL_PORT:-3306}:3306"
volumes:
- ./data:/var/lib/mysql
- ./logs:/var/log/mysql
- ./config/my.cnf:/etc/mysql/conf.d/my.cnf
重要配置说明:
- restart: unless-stopped - 容器异常退出时自动重启
- environment - 环境变量配置,支持从.env文件读取
- volumes - 数据持久化配置,确保数据安全
- ports - 端口映射,允许外部访问
2. MySQL配置文件 (my.cnf) 要点
[mysqld]
# 基本设置
port = 3306
bind-address = 0.0.0.0
default-storage-engine = InnoDB
# 字符集设置(重要)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 连接设置
max_connections = 200
max_connect_errors = 10
# 缓冲区设置
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
# 日志设置
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
配置注意事项: 1. 字符集必须设置为utf8mb4,以支持完整的Unicode字符集 2. 根据服务器内存调整缓冲区大小 3. 开启慢查询日志便于性能优化 4. MySQL 8.0已不支持查询缓存(query_cache)相关配置
3. 环境变量配置 (.env)
MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_DATABASE=your_database
MYSQL_USER=your_user
MYSQL_PASSWORD=your_password
MYSQL_PORT=3306
安全注意事项: - 生产环境必须修改默认密码 - .env文件不要提交到版本控制系统 - 定期更换密码 - 避免使用弱密码
启动和维护
启动服务
docker-compose up -d
查看服务状态
docker-compose ps
查看日志
# 查看容器日志
docker-compose logs mysql
# 查看错误日志
tail -f logs/error.log
# 查看慢查询日志
tail -f logs/slow.log
停止服务
docker-compose down
常见问题处理
1. 容器无法启动或反复重启
- 检查数据目录权限
- 查看错误日志(logs/error.log)
- 确认配置文件语法正确
- 验证端口是否被占用
2. 连接失败
- 确认容器运行状态
- 检查端口映射
- 验证用户名密码
- 检查防火墙设置
3. 性能问题
- 检查慢查询日志
- 调整缓冲区大小
- 优化索引
- 监控资源使用情况
数据备份建议
1. 使用docker-compose执行备份
docker-compose exec mysql mysqldump -u root -p database_name > backup.sql
2. 自动备份脚本示例
#!/bin/bash
backup_dir="backups"
date_format=$(date +%Y%m%d_%H%M%S)
docker-compose exec -T mysql mysqldump -u root -p database_name > "${backup_dir}/backup_${date_format}.sql"
安全建议
- 网络安全
- 限制端口访问
- 使用专用网络
-
启用SSL/TLS加密
-
账户安全
- 定期更换密码
- 限制用户权限
-
删除未使用的账户
-
数据安全
- 定期备份
- 加密敏感数据
- 监控异常访问
性能优化建议
- 硬件资源
- 适当分配内存
- 使用SSD存储
-
监控CPU使用率
-
配置优化
- 调整缓冲池大小
- 优化日志设置
-
配置合适的连接数
-
查询优化
- 建立合适的索引
- 优化SQL语句
- 定期维护统计信息