🐳 使用 Docker Compose 安装 MySQL(含配置详解与常见问题)
标签:#DockerCompose #MySQL #数据库部署 #后端开发 #运维入门 #配置详解
适合读者:开发者、DevOps、新手运维人员
📌 一、前言
在日常开发与部署中,我们经常需要快速搭建一个独立的 MySQL 实例。相比手动安装,使用 Docker Compose 能以最小成本完成部署、启动、关闭、迁移等一整套操作。
🧱 二、目录结构
docker-mysql/
├── docker-compose.yml
└── my.cnf # 可选:自定义配置文件
⚙️ 三、docker-compose.yml 配置详解
version: "3.9"
services:
mysql:
image: mysql:8.0
container_name: mysql8
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123456 # ✅ root用户密码(必填)
MYSQL_DATABASE: demo_db # ✅ 自动创建数据库
MYSQL_USER: dev_user # ✅ 创建新用户
MYSQL_PASSWORD: dev_pass # ✅ 用户密码
volumes:
- ./data:/var/lib/mysql # ✅ 数据持久化路径
- ./my.cnf:/etc/mysql/conf.d/my.cnf # ✅ 可选:自定义配置
networks:
- mysql_net
networks:
mysql_net:
driver: bridge
🔍 参数详解:
配置项 | 含义 |
---|---|
image |
使用官方的 mysql:8.0 镜像 |
container_name |
容器名称 |
restart: always |
容器异常退出后自动重启 |
ports |
主机:容器 端口映射,默认 MySQL 为 3306 |
environment |
配置 MySQL 初始参数(环境变量) |
volumes |
挂载数据和配置,确保持久化 |
networks |
自定义网络,支持多服务联通 |
🧾 四、my.cnf 自定义配置(可选)
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
将其保存为
my.cnf
文件后自动生效,常用于统一字符集、SQL严格模式等。
🚀 五、启动与使用
1️⃣ 启动容器
docker compose up -d
-d
表示后台运行
2️⃣ 查看运行状态
docker ps
3️⃣ 登录 MySQL
docker exec -it mysql8 mysql -uroot -p
输入
root123456
进入
🧪 六、连接测试(使用客户端)
在 Navicat 或 DBeaver 中添加新连接:
- 主机地址:
虚拟机ip
- 端口:
3306
- 用户名:
dev_user
- 密码:
dev_pass
- 数据库:
demo_db
❗ 七、常见问题处理
问题 | 解决方式 |
---|---|
容器启动报错 Can't connect to local MySQL server |
检查端口是否被占用,或数据目录权限问题 |
Access denied for user |
检查环境变量用户名/密码是否一致 |
字符集乱码 | 使用 my.cnf 配置为 utf8mb4 |
Docker 数据未持久化 | 确认 ./data 已正确挂载 |
🛠 八、最佳实践建议
- ✅ 使用
volumes
绑定宿主机数据,避免数据丢失 - ✅ 启用
mysql.cnf
进行统一配置管理 - ✅ 推荐使用非 root 用户连接数据库
- ✅ 配合
phpMyAdmin
或其他服务通过 Compose 一键启动集群
📦 九、扩展:一键添加 phpMyAdmin(可选)
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
ports:
- "8080:80"
environment:
PMA_HOST: mysql8
depends_on:
- mysql
networks:
- mysql_net
🔍 参数详解:
配置项 | 含义 |
---|---|
phpmyadmin |
官方 phpMyAdmin 镜像 |
ports: "8080:80" |
主机8080端口映射到容器80端口 |
PMA_HOST: mysql8 |
phpMyAdmin 连接数据库主机名,应该与 mysql 服务名一致 |
depends_on: mysql |
启动顺序控制,先启动 MySQL |
networks: mysql_net |
需要保证和mysql在同一网络 |
启动后访问
http://虚拟机ip:8080
登录可视化管理页面。
输入mysql的用户名和密码登录:root/root123456
📚 十、结语
使用 Docker Compose 部署 MySQL 极大简化了环境配置和版本控制,不论是本地开发、测试还是 CI/CD 环境搭建,都能快速、高效、可靠地完成数据库部署任务。
👍 如果你觉得本文对你有帮助,欢迎 点赞 + 收藏 + 关注我,后续将持续更新更多 Docker、MySQL、SpringBoot 等技术实战文章!