【技术】Docker 部署 MySQL

Docker 部署 MySQL

Docker 安装

如果已经安装了 Docker 跳过此步骤。如果没有安装 Docker 可以参考我的另一篇文章Ubuntu 安装 Docker。也可以参考Docker 官网文档安装。

MySQL 部署

不废话,直接上命令,罗列几个场景。

不挂载宿主机目录

数据、日志、配置都在容器内部。

bash 复制代码
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:latest \
--lower_case_table_names=1

参数解释:

  • --name mysql:给容器起个名字,方便后续管理。
  • -e :运行环境变量配置。
    • MYSQL_ROOT_PASSWORD=123456:通过环境变量设置 root 用户的密码(必填,否则容器启动失败)。
  • -d:后台运行。
  • mysql:latest:使用的镜像和标签。
  • --lower_case_table_names=1:配置MySQL不区分大小写。

数据配置持久化

数据、日志、配置挂载在宿主机,方便查看修改。
注意权限:将数据、日志、配置的文件夹的所有者和组修改为 999

bash 复制代码
sudo chown -R 999:999 /data/mysql/data /data/mysql/conf /data/mysql/logs

因为 MySQL 官方 Docker 镜像里,MySQL 服务是以一个名叫 mysql 的系统用户来运行的,而这个用户的 UID 和 GID 在镜像中被硬编码为 999。

当你把宿主机的一个目录(比如 /data/mysql/data)挂载到容器里,如果这个目录的所有者不是 999,容器内的 mysql 用户就没有权限在里面读写文件,MySQL 会启动失败,报类似 Permission denied 的错误。

所以我们需要提前在宿主机上,把这个目录的所有者改成 999,这样容器里的 mysql 用户才能顺畅使用它。

bash 复制代码
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/logs:/var/log/mysql \
mysql:latest \
--lower_case_table_names=1

参数解释:

  • -v:目录挂载,将容器内部的目录映射到宿主机。参数格式为:宿主机地址:容器内部地址。挂载的目的是方便用户在宿主机上直接操作文件,文件的修改会和容器内部同步。
相关推荐
sbjdhjd13 分钟前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
for_ever_love__1 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
帷幕落秋2 小时前
Docker的两种安装
运维·docker·容器
工业一体机老司机2 小时前
工业一体机选购后的系统部署:Ubuntu下Docker容器化运行与GPIO配置
linux·ubuntu·docker·人机交互
for_ever_love__2 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
java1234_小锋5 小时前
【技术专题】Mysql8 数据库 - Mysql8 触发器
数据库·mysql·mysql8
姜鱼问生6 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
雨落在了我的手上7 小时前
MySQL数据库基础(6):增删改查操作(1)
数据库·mysql
人生百态,人生如梦7 小时前
Ubuntu在低版本下使用ccswitch+claudecode(CCSwitch+Docker+Claude)连调教程
linux·ubuntu·docker·claudecode·ccswitch
程序员老赵7 小时前
Docker 部署 OpenViking:轻松搭建 AI Agent 上下文数据库平台
docker·开源·agent