Docker快速部署MySQL和Redis指南

Docker数据库服务部署指南
1. MySQL容器部署
1.1 基础部署
# 拉取MySQL官方镜像
docker pull mysql:8.0
# 创建数据持久化目录
mkdir -p /data/mysql/data
mkdir -p /data/mysql/conf
mkdir -p /data/mysql/logs
# 运行MySQL容器
docker run -d \
--name mysql8 \
-p 3306:3306 \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/logs:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=your_password \
-e MYSQL_DATABASE=your_db \
--restart unless-stopped \
mysql:8.0
1.2 MySQL配置优化
创建 /data/mysql/conf/my.cnf
:
[mysqld]
# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 连接数设置
max_connections=1000
max_connect_errors=1000
# 缓冲区设置
innodb_buffer_pool_size=1G
innodb_log_buffer_size=16M
# 日志设置
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
2. Redis容器部署
2.1 基础部署
# 拉取Redis官方镜像
docker pull redis:6.2
# 创建数据和配置目录
mkdir -p /data/redis/data
mkdir -p /data/redis/conf
# 创建Redis配置文件
cat > /data/redis/conf/redis.conf << EOF
requirepass your_password
appendonly yes
maxmemory 512mb
maxmemory-policy allkeys-lru
EOF
# 运行Redis容器
docker run -d \
--name redis6 \
-p 6379:6379 \
-v /data/redis/data:/data \
-v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
--restart unless-stopped \
redis:6.2 redis-server /etc/redis/redis.conf
3. Docker Compose部署
创建 docker-compose.yml
:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql8
ports:
- "3306:3306"
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/conf:/etc/mysql/conf.d
- /data/mysql/logs:/var/log/mysql
environment:
- MYSQL_ROOT_PASSWORD=your_password
- MYSQL_DATABASE=your_db
restart: unless-stopped
networks:
- backend
redis:
image: redis:6.2
container_name: redis6
ports:
- "6379:6379"
volumes:
- /data/redis/data:/data
- /data/redis/conf/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
restart: unless-stopped
networks:
- backend
networks:
backend:
driver: bridge
启动服务:
docker-compose up -d
4. 性能优化建议
4.1 MySQL优化
-
内存配置
- 根据服务器内存调整buffer_pool_size
- 优化查询缓存设置
- 合理设置连接数
-
存储优化
- 使用合适的存储引擎
- 优化表结构
- 定期维护索引
4.2 Redis优化
-
内存管理
- 设置合理的maxmemory
- 选择适当的淘汰策略
- 开启持久化机制
-
网络优化
- 启用keepalive
- 调整tcp-backlog
- 优化连接池设置
5. 监控与维护
5.1 容器监控
# 查看容器状态
docker stats mysql8 redis6
# 查看容器日志
docker logs -f mysql8
docker logs -f redis6
5.2 数据备份
# MySQL备份
docker exec mysql8 mysqldump -u root -p your_db > backup.sql
# Redis备份
docker exec redis6 redis-cli SAVE
6. 常见问题解决
- 连接问题
# 检查容器网络
docker network inspect backend
# 测试MySQL连接
docker exec -it mysql8 mysql -u root -p
# 测试Redis连接
docker exec -it redis6 redis-cli
- 性能问题
# 查看MySQL进程
docker exec mysql8 mysqladmin processlist
# 查看Redis内存使用
docker exec redis6 redis-cli info memory
- 日志查看
# MySQL错误日志
docker exec mysql8 tail -f /var/log/mysql/error.log
# Redis日志
docker logs redis6