MySQL Docker 容器化部署全指南

在开始MySQL的Docker部署实操前,先简要明确MySQL的核心作用及容器化部署的价值:

MySQL是什么:MySQL是一款开源的关系型数据库管理系统(RDBMS),基于SQL(结构化查询语言)实现结构化数据的存储、查询、更新、删除等管理操作。它广泛应用于Web应用、企业业务系统等场景,可高效处理用户信息、订单记录、商品数据等结构化数据,具备轻量、高性能、稳定性强及跨平台兼容的特点,是当前主流的数据库解决方案之一。

为什么用Docker部署MySQL:传统部署MySQL需手动配置系统依赖、权限、端口等环境,易因操作系统版本、依赖库差异出现“本地可运行、线上部署失败”的问题;且多版本MySQL共存时易产生端口冲突、依赖冲突。而Docker通过“容器化”技术,将MySQL及其所有依赖(如系统库、配置模板)打包为独立镜像,可在任意支持Docker的环境中标准化运行,从根源解决环境一致性问题,同时大幅简化部署流程。

Docker部署MySQL的优势

  1. 环境一致:镜像包含完整运行依赖,确保开发、测试、生产环境无差异,避免“环境适配”问题;
  2. 隔离安全:MySQL容器与宿主机及其他服务完全隔离,不占用宿主机全局资源,避免端口、依赖冲突;
  3. 部署高效:通过一行命令或配置文件即可启动服务,版本切换仅需更换镜像标签,无需重装环境;
  4. 资源轻量化:容器相比虚拟机占用更少CPU、内存资源,适合单机多服务部署;
  5. 数据可控:支持数据卷挂载,将核心数据存储在宿主机,避免容器删除导致数据丢失,且便于备份与跨环境迁移。

1、查看 MySQL 镜像详情

你可以在 轩辕镜像 中找到 MySQL 镜像页面,获取最新镜像信息及拉取说明:
👉 https://xuanyuan.cloud/r/library/mysql

在镜像页面中,提供了多种拉取方式,以下将详细说明如何通过不同方式部署 MySQL。

2、下载 MySQL 镜像

2.1 使用轩辕镜像登录验证的方式拉取

通过轩辕镜像加速拉取指定版本(8.0)的 MySQL 镜像:

docker pull docker.xuanyuan.run/library/mysql:8.0

2.2 拉取后改名(标准化镜像标签)

若需将镜像标签统一为标准格式(library/mysql:8.0),可执行以下组合命令,同时清理临时镜像标签以节省存储:

docker pull docker.xuanyuan.run/library/mysql:8.0 \
&& docker tag docker.xuanyuan.run/library/mysql:8.0 library/mysql:8.0 \
&& docker rmi docker.xuanyuan.run/library/mysql:8.0

命令说明

  • docker pull:从轩辕镜像加速拉取镜像
  • docker tag:将拉取的镜像重命名为标准标签 library/mysql:8.0
  • docker rmi:删除临时镜像标签(docker.xuanyuan.run/library/mysql:8.0),避免重复占用存储

2.3 使用免登录方式拉取(推荐)

免登录方式简化拉取流程,适合快速部署:

docker pull xxx.xuanyuan.run/library/mysql:8.0

带重命名的完整命令(标准化标签+清理临时镜像):

docker pull xxx.xuanyuan.run/library/mysql:8.0 \
&& docker tag xxx.xuanyuan.run/library/mysql:8.0 library/mysql:8.0 \
&& docker rmi xxx.xuanyuan.run/library/mysql:8.0

2.4 官方直连方式

若网络可直接访问 Docker Hub,可直接拉取官方镜像:

docker pull library/mysql:8.0

2.5 查看镜像是否下载成功

执行以下命令验证镜像是否拉取成功:

docker images

输出示例(若成功,将显示类似以下结果):

REPOSITORY   TAG     IMAGE ID       CREATED       SIZE
mysql        8.0     7b84f42c6f92   2 weeks ago   534MB

3、部署 MySQL

MySQL 提供三种部署方式,分别适配测试、生产、企业级场景,可根据需求选择。

3.1 快速部署(最简方式)

适合 测试环境临时使用,无需复杂配置,一键启动:

docker run -d --name mysql-test \-e MYSQL_ROOT_PASSWORD=123456 \-p 3306:3306 \library/mysql:8.0

参数说明

  • --name mysql-test:指定容器名称为 mysql-test(可自定义)
  • -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL root 用户密码(必须配置,建议生产环境使用强密码)
  • -p 3306:3306:将宿主机的 3306 端口映射到容器内的 3306 端口(MySQL 默认端口)
  • -d:让容器在后台运行

验证方式
进入容器内的 MySQL 终端,验证服务是否正常:

docker exec -it mysql-test mysql -uroot -p

输入密码 123456 后,若能进入 MySQL 命令行,则部署成功。

3.2 挂载目录(推荐方式,适合生产环境)

通过 数据卷挂载 将 MySQL 的配置、数据、日志目录映射到宿主机,实现 数据持久化配置可控,避免容器删除后数据丢失。

第一步:创建宿主机目录

在宿主机上创建用于存储 MySQL 配置、数据、日志的目录:

mkdir -p /data/mysql/{conf,data,logs}
  • conf:存放 MySQL 配置文件
  • data:存放 MySQL 数据文件(核心目录,确保权限充足)
  • logs:存放 MySQL 日志文件

第二步:启动容器并挂载目录

执行以下命令启动容器,同时完成目录映射:

docker run -d --name mysql-prod \-e MYSQL_ROOT_PASSWORD=StrongPass123! \-p 3306:3306 \-v /data/mysql/conf:/etc/mysql/conf.d \-v /data/mysql/data:/var/lib/mysql \-v /data/mysql/logs:/var/log/mysql \library/mysql:8.0

目录映射说明

宿主机目录 容器内目录 用途
/data/mysql/conf /etc/mysql/conf.d 存放 MySQL 配置文件
/data/mysql/data /var/lib/mysql 存放 MySQL 数据文件(核心)
/data/mysql/logs /var/log/mysql 存放 MySQL 日志文件

第三步:配置文件示例(自定义 MySQL 配置)

在宿主机的 /data/mysql/conf 目录下新建配置文件 my.cnf,示例内容如下:

[mysqld]
# 允许所有IP访问(远程连接需开启)
bind-address = 0.0.0.0
# 最大连接数(根据业务需求调整)
max_connections = 500
# 密码认证插件(兼容旧版本客户端)
default_authentication_plugin = mysql_native_password

应用配置
修改配置后,需重启容器使配置生效:

docker restart mysql-prod

3.3 docker-compose 部署(企业级场景)

通过 docker-compose.yml 文件统一管理容器配置,支持一键启动、停止、查看状态,适合多服务协同场景。

第一步:编写 docker-compose.yml 文件

创建 docker-compose.yml 文件,内容如下(可根据需求调整参数):

version: '3.8'  # 兼容的 docker-compose 版本
services:mysql:image: library/mysql:8.0  # 使用的镜像container_name: mysql-service  # 容器名称restart: always  # 容器异常退出时自动重启ports:- "3306:3306"  # 端口映射(宿主机:容器)environment:# 初始化环境变量(容器首次启动时生效)MYSQL_ROOT_PASSWORD: StrongPass123!  # root 用户密码MYSQL_DATABASE: appdb  # 自动创建的数据库名称MYSQL_USER: appuser  # 自动创建的普通用户MYSQL_PASSWORD: apppass  # 普通用户密码volumes:# 目录挂载(宿主机目录:容器目录)- ./conf:/etc/mysql/conf.d  # 配置文件目录(相对路径,与 yml 同目录)- ./data:/var/lib/mysql     # 数据文件目录- ./logs:/var/log/mysql     # 日志文件目录

第二步:启动服务

docker-compose.yml 文件所在目录执行以下命令,一键启动 MySQL 服务:

docker compose up -d

常用命令

  • 停止服务(保留数据卷):docker compose down
  • 查看服务状态:docker compose ps
  • 进入容器内 MySQL 终端:docker exec -it mysql-service mysql -uroot -p

4、结果验证

部署完成后,可通过以下方式验证 MySQL 服务是否正常运行。

4.1 客户端连接验证(本地/远程)

通过 MySQL 客户端连接服务(需安装 MySQL 客户端,如 mysql-client):

# 本地连接(宿主机直接连接)
mysql -h 127.0.0.1 -P 3306 -uroot -p# 远程连接(替换为宿主机 IP)
mysql -h 192.168.1.100 -P 3306 -uroot -p

输入密码后,若能进入 MySQL 命令行,则连接成功。

4.2 容器状态验证

查看容器是否处于运行状态:

docker ps

STATUS 列显示 Up(如 Up 5 minutes),则容器运行正常。

4.3 日志查看(排查问题)

查看 MySQL 容器日志,确认服务启动过程是否有异常:

# 查看最新日志(替换为实际容器名,如 mysql-prod 或 mysql-service)
docker logs mysql-prod# 实时查看日志(加 -f 参数)
docker logs -f mysql-prod

5、常见问题

5.1 连接被拒绝?

若客户端连接时提示“Connection refused”,可从以下方向排查:

  • 密码错误:确认 MYSQL_ROOT_PASSWORD 环境变量设置的密码是否正确(区分大小写)。
  • 端口未开放
    • 云服务器:检查安全组是否放行 3306 端口。
    • 本地服务器:检查防火墙(如 ufwfirewalld)是否允许 3306 端口访问。
  • 绑定地址限制:确保 MySQL 配置中 bind-address = 0.0.0.0(允许所有 IP 访问),避免仅绑定本地回环地址(127.0.0.1)。

5.2 如何初始化数据库?

容器首次启动时,可通过 environment 环境变量自动初始化数据库、用户,无需手动操作:

# docker-compose 中配置示例(docker run 需加 -e 参数)
environment:MYSQL_DATABASE: appdb        # 自动创建数据库 appdbMYSQL_USER: appuser          # 自动创建用户 appuserMYSQL_PASSWORD: apppass      # 自动设置 appuser 的密码MYSQL_ROOT_PASSWORD: StrongPass123!  # root 密码(必须)

说明:仅容器首次启动时初始化,后续重启不会重复创建。

5.3 数据丢失怎么办?

原因:未挂载 /var/lib/mysql 目录(MySQL 数据存储目录),容器删除后数据随容器一起删除。
解决方法:生产环境务必通过 -v 参数(或 docker-compose volumes)将 /var/lib/mysql 映射到宿主机目录(如 3.2 节的 /data/mysql/data),实现数据持久化。

5.4 容器内时区不对?

MySQL 容器默认时区可能为 UTC,需手动设置为本地时区(如 Asia/Shanghai):

  • docker run 方式:添加 -e TZ=Asia/Shanghai 参数。
    docker run -d --name mysql-prod \-e TZ=Asia/Shanghai \  # 设置时区-e MYSQL_ROOT_PASSWORD=StrongPass123! \-p 3306:3306 \-v /data/mysql/data:/var/lib/mysql \library/mysql:8.0
    
  • docker-compose 方式:在 environment 中添加 TZ: Asia/Shanghai

5.5 日志过大怎么办?

通过 logrotate 工具定期切割日志,避免日志文件占用过多磁盘空间。
在宿主机创建日志切割配置文件 /etc/logrotate.d/mysql,内容如下:

# MySQL 日志切割配置
/data/mysql/logs/*.log {daily          # 每天切割一次rotate 7       # 保留 7 天的日志文件compress       # 压缩旧日志(gzip)delaycompress  # 延迟压缩(保留当天日志不压缩)missingok      # 日志文件不存在时不报错notifempty     # 空日志文件不切割create 0640 root root  # 新建日志文件的权限和所有者
}

结尾

通过本文,你已掌握基于 轩辕镜像 的 MySQL 容器化部署全流程,包括镜像拉取、多场景部署(测试/生产/企业级)、结果验证及常见问题排查。

  • 👉 初学者:建议先尝试「快速部署」(3.1 节),确认 MySQL 服务可正常运行,熟悉基础命令。
  • 👉 生产环境:推荐使用「挂载目录」(3.2 节)或「docker-compose 部署」(3.3 节),确保数据持久化、配置可控。
  • 👉 高级需求:可基于此扩展,如实现 MySQL 主从复制、高可用集群(MGR)、定时备份与恢复方案等,进一步提升服务稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025热浸塑钢管工厂最新企业品牌推荐排行榜 ,NHAP热浸塑钢管,电力热浸塑钢管,N-HAP热浸塑钢管,电力涂塑钢管公司推荐!

在热浸塑钢管行业,随着市场需求的不断增长,各类制造企业纷纷涌现,但行业也面临着诸多问题。部分企业为追求短期利益,在生产过程中偷工减料,导致产品质量参差不齐,防腐、耐磨等关键性能不达标,给工程安全埋下隐患…

网站文章的作用做驾考学时在哪个网站

有时候,我们会用 Set Identity_Insert Table ON 来处理数据表的某些自增列。如果在本地倒是没什么问题。如果是远程服务器,则会报 找不到对象"XXX" ,因为它不存在或者您没有所需的权限 其实这个跟你的权限无关,即使你链接服务器用…

中文网站建设小组明星网页设计模板

文章目录 1. 遇到问题1.1 问题现象1.2 解决办法 2. 重新设置最新 sparse源3. 更多参考资料3.1 字节源3.2 ustc 源3.3 清华源3.4 其他人的总结 1. 遇到问题 有好一阵子没有更新源和安装软件了, 使用ustc的源, 更新了好一阵子, 最后安装居然还出…

2025广告喷绘公司最新推荐榜单, 覆盖广告喷绘广告牌,广告喷绘写真,广告喷绘广告牌写真,广告喷绘门头服务!

在商业浪潮奔涌向前的当下,广告喷绘已成为品牌抢占市场心智的视觉利器,行业需求持续呈井喷式增长。然而繁荣表象之下,市场乱象亦随之滋生:一方面,行业准入门槛较低,大量缺乏专业级设备与成熟技术团队的小型厂商涌…

详细介绍:ck-editor5的研究 (5):优化-页面离开时提醒保存,顺便了解一下 Editor的生命周期 和 6大编辑器类型

详细介绍:ck-editor5的研究 (5):优化-页面离开时提醒保存,顺便了解一下 Editor的生命周期 和 6大编辑器类型pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; disp…

贵阳网站推广有几家二手书网站策划书

1.亿级积分数据分库分表:总体方案设计 上一篇博客中写了一下积分数据分库分表的总体方案设计,里面说了采用应用程序代码双写的方式实现的增量数据同步,本篇就对这一块进行一些细化的介绍,包括: 为什么不用Canal监听数…

【android bluetooth 案例分析 04】【Carplay 详解 3】【Carplay 连接之车机主动连手机】 - 教程

【android bluetooth 案例分析 04】【Carplay 详解 3】【Carplay 连接之车机主动连手机】 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !i…

实用指南:24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务

实用指南:24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务2025-10-05 10:55 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !i…

详细介绍:STM32 串口通信①:USART 全面理解 + 代码详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[算法/数据结构] 数据结构与算法

0 序工作这么些年,数据结构、及其基础算法,在工作实践中仍时长闪现。为此,此篇进行一定的归纳总结,并持续更新完善。1 概述:数据结构与算法简介数据结构(Data Structure)是计算机中存储、组织数据的方式。数据结…

基于点标注的弱监督目标检测方法研究 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

黑河北京网站建设设计公司的名字

亚马逊云科技近日在纽约峰会上宣布 Amazon Elastic Compute Cloud(EC2)P5 实例正式可用。这是一款下一代 GPU 实例,由最新的英伟达 H100 Tensor Core GPU 提供支持,可以满足客户在运行人工智能、机器学习和高性能计算工作负载时对高性能和高扩展性的需求…

怎么做网站app一流的聊城做网站公司

本文地址http://www.cnblogs.com/Bond/p/3972854.html 最近一直做移动端,没和IE6打交道了,瞬间感觉世界变美好了。移动端虽然还是各种坑,但是比起修复IE6那还是轻松多了,移动端很多效果可以用CSS3来做,感觉一切都和谐…

图论new

边双连通分量 #include<bits/stdc++.h> using namespace std; const int N = 5e5+5; int n, m, cnt, ans, dfn[N], low[N]; //dfn记录dfs序,low表示这个点除树边外能连到最浅 vector<int> mp[N], mp2[N]…

2025夹丝玻璃厂家最新企业品牌推荐排行榜,艺术夹丝玻璃,淋浴房夹丝玻璃,极简门夹丝玻璃,金属夹丝玻璃公司推荐!

在夹丝玻璃行业快速发展的当下,市场上的源头厂家数量不断增多,然而行业也面临着诸多问题。一方面,部分厂家缺乏核心技术,生产的夹丝玻璃在安全性、耐用性等方面难以满足市场需求,产品质量参差不齐;另一方面,一些…

斜率优化dp复习笔记

$$ f_j+sum_isum_j-sum_j^2>f_l+sum_isum_l-sum_l^2 \Rightarrow \frac{(f_j-sum_j^2)-(sum_l-sum_l^2)}{-sum_j-(-sum_l)}>sum_i $$那么点集就是 $(-sum_x,f_x-sum_x^2)$。那么对于当前点 $i$,所有斜率 $\leq …

掌握形式验证,护航芯片安全

在 IC 设计的世界里,任何一个微小错误都可能引发重大后果。形式验证(Formal Verification),以其数学证明的方式,成为确保设计可靠性与安全性的强大盾牌。 核心基础与优势解析 1、精准规范,明确预期行为 一切始于…

STL-list - 实践

STL-list - 实践2025-10-05 10:35 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

2025橡胶软接头厂家最新企业品牌推荐排行榜,法兰橡胶软接头,可曲挠,挠性,KXT,耐油,EPDM,耐腐蚀,三元乙丙橡胶软接头,橡胶柔性软接头公司推荐!

在橡胶软接头行业,质量管控与服务体系的缺失已成为制约产业升级的关键瓶颈。具体表现为: 产品质量两极分化:部分企业为压缩成本,违规采用再生胶、回收料等劣质原料,导致产品出现密封性失效、老化周期缩短等问题,…

整体二分笔记

整体二分 本来感觉挺神秘的一个东西, 学完了似乎没有多难, 放几个板子随便写写吧(今天数学不想做题) 从最最最最人尽皆知的区间第 \(k\) 大问题开始吧 引入 如果我想问你一个序列中的区间的第 \(k\) 大,你会如何?…