【技术】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:目录挂载,将容器内部的目录映射到宿主机。参数格式为:宿主机地址:容器内部地址。挂载的目的是方便用户在宿主机上直接操作文件,文件的修改会和容器内部同步。
相关推荐
Decay__1 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
Decay__7 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
杨浦老苏12 小时前
把项目管理搬回自己服务器:Windshift部署与避坑
docker·项目管理·群晖
木雷坞13 小时前
Baserow Docker部署:导入设备借用CSV,再用表单新增登记
运维·docker·容器
wefg114 小时前
【Docker】基本指令
运维·docker·容器
后台模板学习14 小时前
MongoDB 与 MySQL 在 IM 即时聊天场景中该
数据库·mysql·mongodb
IT大白鼠15 小时前
渗透测试实战从靶场搭建到渗透流程——第 8 篇 · 服务型靶标(上):MySQL 双版本写文件链
数据库·mysql·渗透测试
少年的范儿15 小时前
Windows 安装 MySQL 8.4 教程(ZIP 解压版):配置 my.ini、初始化数据库与启动服务
数据库·windows·mysql
牛马工作号16 小时前
Copyparty 轻量文件共享:Docker Compose 部署、权限与多协议使用全指南
运维·docker·容器
神仙别闹16 小时前
基于Python+MySQL实现(Web)个人博客系统
python·mysql·php