当前位置: 首页 > news >正文

10、Docker Compose 安装 MySQL

🐳 使用 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.0container_name: mysql8restart: alwaysports:- "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_netnetworks: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/phpmyadminrestart: alwaysports:- "8080:80"environment:PMA_HOST: mysql8depends_on:- mysqlnetworks:- mysql_net

🔍 参数详解:

配置项含义
phpmyadmin官方 phpMyAdmin 镜像
ports: "8080:80"主机8080端口映射到容器80端口
PMA_HOST: mysql8phpMyAdmin 连接数据库主机名,应该与 mysql 服务名一致
depends_on: mysql启动顺序控制,先启动 MySQL
networks: mysql_net需要保证和mysql在同一网络

启动后访问 http://虚拟机ip:8080 登录可视化管理页面。
输入mysql的用户名和密码登录:root/root123456

在这里插入图片描述
在这里插入图片描述


📚 十、结语

使用 Docker Compose 部署 MySQL 极大简化了环境配置和版本控制,不论是本地开发、测试还是 CI/CD 环境搭建,都能快速、高效、可靠地完成数据库部署任务。

👍 如果你觉得本文对你有帮助,欢迎 点赞 + 收藏 + 关注我,后续将持续更新更多 Docker、MySQL、SpringBoot 等技术实战文章!

http://www.lryc.cn/news/602218.html

相关文章:

  • flink yarn 问题排查
  • 同态滤波算法详解:基于频域变换的光照不均匀校正
  • 第4章唯一ID生成器——4.3 基于时间戳的趋势递增的唯一ID
  • 测试用例设计常用方法
  • Datawhale AI夏令营--Task2:理解项目目标、从业务理解到技术实现!
  • 用于 Web 认证的 抗量子签名——ML-DSA 草案
  • me.js - 基于angular的前端模块化框架
  • 【氮化镓】GaN同质外延p-i-n二极管中星形与三角形扩展表面缺陷的电子特性
  • 基于Vue3.0+Express的前后端分离的任务清单管理系统
  • 学习Python中Selenium模块的基本用法(2:下载浏览器驱动)
  • 【前端】Tab切换时的数据重置与加载策略技术文档
  • 三角洲摸金模拟器(简易版本)(开源)
  • Claude Launcher:支持Kimi K2的Claude Code可视化启动工具
  • ofd文件转pdf
  • iphone手机使用charles代理,chls.pro/ssl 后回车 提示浏览器打不开该网页
  • 【Spring Boot 快速入门】二、请求与响应
  • 搜索引擎高级搜索指令大全(Google、百度等浏览器通用)
  • nvim cspell
  • 打通视频到AI的第一公里:轻量RTSP服务如何重塑边缘感知入口?
  • 中国自然灾害影响及损失数据
  • Ubuntu 安装redis和nginx
  • 【JSqlParser】sql解析器使用案例
  • jimfs:Java内存文件系统,脱离磁盘IO瓶颈利器
  • 全球Wi-Fi室外天线市场洞察2024–2032:规模、驱动因素与技术演进
  • Mybatis_4
  • Focusing on Tracks for Online Multi-Object Tracking—CVPR2025多目标跟踪(TrackTrack)
  • Ethereum:Geth运维实战,geth export与geth import命令的实用性深度评估
  • 使用 Qt Installer Framework(IFW)进行打包
  • 网络安全第14集
  • 8.1 ESP32CAM 服务器 网络摄像头