Docker 部署 MySQL 实战

news2024/11/27 18:54:04

在现代应用开发与数据管理领域,MySQL 作为一款广泛使用的开源关系型数据库管理系统,扮演着极为重要的角色。而 Docker 容器化技术的出现,为 MySQL 的部署提供了一种便捷、高效且可移植的解决方案。本文将详细介绍如何使用 Docker 部署 MySQL 的实战过程。

一、准备工作

在开始部署之前,首先需要确保已经在目标服务器或本地开发环境中安装了 Docker。如果尚未安装,请根据操作系统的类型(如 Linux、Windows 或 macOS)前往 Docker 官方网站下载并安装相应的 Docker 版本。

二、拉取 MySQL 镜像

Docker 镜像类似于一个包含了应用程序及其所有依赖项的模板。MySQL 在 Docker Hub 上有官方维护的镜像,我们可以直接拉取该镜像到本地。

打开终端或命令提示符,执行以下命令:

docker pull mysql:latest

这里的 mysql:latest 表示拉取 MySQL 的最新版本镜像。当然,也可以指定特定的版本号,如 mysql:8.0 等,以确保使用的是经过测试和稳定的版本。

三、创建并启动 MySQL 容器

  1. 镜像拉取完成后,就可以基于该镜像创建并启动 MySQL 容器了。使用以下命令:
docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  -p 3306:3306 \
  mysql:latest

在上述命令中:

  • -d 参数表示让容器在后台运行,这样终端就可以继续执行其他命令而不会被容器的输出所阻塞。
  • --name mysql-container 为容器指定了一个名称,方便后续对容器进行管理和操作。这里将容器命名为 mysql-container,你可以根据自己的需求修改名称。
  • -e MYSQL_ROOT_PASSWORD=your_root_password 用于设置 MySQL 的 root 用户密码。请务必将 your_root_password 替换为一个强密码,以保障数据库的安全。同时,需要注意密码的复杂性,避免使用过于简单的密码,如生日、纯数字或纯字母组合等,建议包含大小写字母、数字和特殊字符的组合。
  • -p 3306:3306 是端口映射设置。将宿主机的 3306 端口映射到容器内的 3306 端口,这样就可以通过宿主机的 IP 地址和 3306 端口访问容器内的 MySQL 服务。如果宿主机上的 3306 端口已经被其他应用占用,可以将宿主机的端口修改为其他未被占用的端口,如 -p 3307:3306,但在连接数据库时需要相应地修改端口号。另外,在生产环境中,需要谨慎考虑端口的暴露情况,尽量避免将数据库端口直接暴露在公网上,可通过防火墙或其他网络安全策略进行限制。
  1. 容器启动后,可以使用以下命令查看容器的运行状态:
docker ps

该命令会列出当前正在运行的容器信息,包括容器 ID、名称、镜像名称、创建时间以及端口映射等信息。如果看到 mysql-container 在列表中,并且状态为 Up,则表示 MySQL 容器已经成功启动。

四、连接到 MySQL 容器

有多种方式可以连接到刚刚启动的 MySQL 容器中的数据库。

  1. 使用 MySQL 命令行客户端:
    • 如果宿主机上已经安装了 MySQL 命令行客户端,可以直接使用以下命令连接:
mysql -h 127.0.0.1 -P 3306 -u root -p

其中,-h 表示主机地址,这里使用 127.0.0.1 表示连接到本地(宿主机);-P 是端口号,根据前面的端口映射设置,如果是默认的 3306 端口则无需修改;-u 是用户名,这里使用 root 用户;-p 表示需要输入密码,输入之前设置的 your_root_password 即可登录到 MySQL 容器内的数据库。在连接时,如果遇到连接失败的情况,需要检查密码是否正确、端口是否被占用或网络是否正常等问题。

  1. 使用数据库管理工具:
    • 也可以使用一些图形化的数据库管理工具,如 Navicat、MySQL Workbench 等。在创建新连接时,设置主机为宿主机的 IP 地址,端口为映射后的端口(如 3306),用户名是 root,密码是之前设置的密码,然后点击连接即可。需要注意的是,不同的数据库管理工具可能在设置连接参数时有一些细微的差别,需要仔细核对。

五、数据持久化

默认情况下,MySQL 容器内的数据存储在容器的文件系统中。如果容器被删除,数据将会丢失。为了实现数据的持久化保存,可以使用 Docker 数据卷。

  1. 创建数据卷:
docker volume create mysql-data
  1. 在启动 MySQL 容器时,挂载数据卷:
docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  -p 3306:3306 \
  -v mysql-data:/var/lib/mysql \
  mysql:latest

这里的 -v mysql-data:/var/lib/mysql 表示将创建的 mysql-data 数据卷挂载到容器内的 /var/lib/mysql 目录,该目录是 MySQL 存储数据的默认目录。这样,即使容器被删除或重新创建,数据卷中的数据仍然会保留。在使用数据卷时,如果出现数据卷挂载失败的情况,可能是数据卷名称错误或者磁盘空间不足等原因,需要仔细排查。

六、容器的备份与恢复

  1. 备份
    • 要备份 MySQL 容器内的数据,可以使用以下命令进入容器并执行 mysqldump 命令:
docker exec -it mysql-container sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql

上述命令会将容器内所有数据库的结构和数据备份到宿主机当前目录下的 backup.sql 文件中。需要注意的是,exec mysqldump 命令中的密码部分需要使用双引号括起来,并且 $MYSQL_ROOT_PASSWORD 是容器内部环境变量,用于获取 root 用户密码。在执行备份命令时,如果备份过程中出现错误,可能是由于数据库连接问题、权限不足或者磁盘空间不足等原因,需要及时检查并解决。

  1. 恢复
    • 当需要恢复数据时,可以先创建一个临时的 MySQL 容器,并将备份文件挂载到容器内,然后在容器内执行 mysql 命令进行恢复:
docker run -it --rm \
  --name mysql-restore-container \
  -v $(pwd)/backup.sql:/backup.sql \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  mysql:latest sh -c 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < /backup.sql'

在上述命令中,-v $(pwd)/backup.sql:/backup.sql 将宿主机当前目录下的 backup.sql 文件挂载到容器内的 /backup.sql 文件,然后在容器内执行 mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < /backup.sql 命令将备份数据恢复到 MySQL 数据库中。--rm 参数表示容器在退出后自动删除,因为这只是一个临时用于恢复数据的容器。在恢复数据时,如果出现恢复失败的情况,可能是备份文件损坏、数据库版本不兼容或者权限问题等,需要仔细排查原因并解决。

通过以上步骤,我们成功地使用 Docker 部署了 MySQL 数据库,并实现了数据的持久化、备份与恢复等重要功能。这种基于 Docker 的部署方式使得 MySQL 的管理更加灵活、便捷,无论是在开发环境还是生产环境中,都能够快速地搭建和维护 MySQL 服务,为应用程序提供稳定可靠的数据存储支持。但在整个过程中,需要时刻关注各种可能出现的问题并及时解决,以确保数据库的正常运行和数据的安全。

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

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

相关文章

蓝桥杯不知道叫什么题目

小蓝有一个整数&#xff0c;初始值为1&#xff0c;他可以花费一些代价对这个整数进行变换。 小蓝可以花贵1的代价将教数增加1。 小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的那个(1到9) .小蓝可以花费10的代价将整数变为原来的2倍, 例如&#xff0c;如果整…

2024年11月HarmonyOS应用开发者高级认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同&#xff0c;作者已于2024年11月22日又更新了一波题库&#xff0c;题库正确率99%&#xff01; 新版…

技术文档的高质量翻译对俄罗斯汽车推广的影响

进入新市场需要的不仅仅是一个伟大的产品&#xff1b;它要求深入了解当地消费者的期望、法规和文化差异。对于希望在俄罗斯取得成功的国际汽车制造商来说&#xff0c;技术文件的质量是一个关键因素。手册、规范和服务指南在产品和用户之间形成了直接的桥梁&#xff0c;影响着客…

【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 树结构 封装为组件使用

【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 树结构 【组件】前端ElementUi 下拉Tree树形组件 带模糊 https://live.csdn.net/v/436057 单独使用 <template><div><el-popoverstyle"overflow-y: auto; "placement"bottom…

论文阅读:Dual-disentangled Deep Multiple Clustering

目录 摘要 引言 模型 实验 数据集 实验结果 结论 摘要 多重聚类近年来引起了广泛关注&#xff0c;因为它能够从不同的角度揭示数据的多种潜在结构。大多数多重聚类方法通常先通过控制特征之间的差异性来提取特征表示&#xff0c;然后使用传统的聚类方法&#xff08;如 …

SQL 复杂查询

目录 复杂查询 一、目的和要求 二、实验内容 &#xff08;1&#xff09;查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。&#xff08;分别采用子查询和连接方式实现&#xff09; 查询出每个订单的消费者姓名及联系方式。 在…

thread_id_key != 0x7777(`fibers` 包与 Node.js 16 及以上版本存在兼容性问题)

文章目录 fibers4.0.3 与 node-v16.13.2-win-x64 的兼容性1. Node.js 版本兼容性2. 特定包版本 (fibers4.0.3)3. 解决方案和替代方案 结论解决方案 运行yarn serve 启动项目&#xff0c;就会弹出上述错误。 fibers4.0.3 与 node-v16.13.2-win-x64 的兼容性 要判断 fibers4.0.3…

数据结构 (6)栈的应用举例

1. 递归调用 递归函数在执行时&#xff0c;会将每一层的函数调用信息&#xff08;包括局部变量、参数和返回地址&#xff09;存储在栈中。当递归函数返回时&#xff0c;这些信息会从栈中弹出&#xff0c;以便恢复之前的执行状态。栈的后进先出&#xff08;LIFO&#xff09;特性…

网络安全在数字时代保护库存数据中的作用

如今&#xff0c;通过软件管理库存已成为一种标准做法。企业使用数字工具来跟踪库存水平、管理供应链和规划财务。 然而&#xff0c;技术的便利性也带来了网络威胁的风险。黑客将库存数据视为有价值的目标。保护这些数据不仅重要&#xff0c;而且必不可少。 了解网络安全及其…

php常用伪协议整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理php常见的伪协议 php伪协议介绍 直观点&#xff0c;就是php可以识别的协议。 类似于我们访问网站的http协议&#xff0c;我们用浏览器访问我们自己本地文件的file协议等。 php可以识别这些协议&#xf…

【软件入门】Git快速入门

Git快速入门 文章目录 Git快速入门0.前言1.安装和配置2.新建版本库2.1.本地创建2.2.云端下载 3.版本管理3.1.添加和提交文件3.2.回退版本3.2.1.soft模式3.2.2.mixed模式3.2.3.hard模式3.2.4.使用场景 3.3.查看版本差异3.4.忽略文件 4.云端配置4.1.Github4.1.1.SSH配置4.1.2.关联…

【SpringBoot】28 API接口防刷(Redis + 拦截器)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 常用的 API 安全措施包括&#xff1a;防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等&#xff0c;以确保接口的安全性。 常见措施 1&#xff09;防火墙 防火墙是网络安全中最基本的安全设备之一&#xff0c…

零基础学安全--shell脚本学习(1)脚本创建执行及变量使用

目录 学习连接 什么是shell shell的分类 查看当前系统支持shell 学习前提 开始学习 第一种执行脚本方法 ​编辑 第二种执行脚本方法 第三种执行脚本方法 变量声明和定义 ​编辑 查看变量 删除变量 学习连接 声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣…

基于FPGA的FM调制(载波频率、频偏、峰值、DAC输出)-带仿真文件-上板验证正确

基于FPGA的FM调制-带仿真文件-上板验证正确 前言一、FM调制储备知识载波频率频偏峰值个人理解 二、代码分析1.模块分析2.波形分析 总结 前言 FM、AM等调制是学习FPGA信号处理一个比较好的小项目&#xff0c;通过学习FM调制过程熟悉信号处理的一个简单流程&#xff0c;进而熟悉…

“AI玩手机”原理揭秘:大模型驱动的移动端GUI智能体

作者&#xff5c;郭源 前言 在后LLM时代&#xff0c;随着大语言模型和多模态大模型技术的日益成熟&#xff0c;AI技术的实际应用及其社会价值愈发受到重视。AI智能体&#xff08;AI Agent&#xff09;技术通过集成行为规划、记忆存储、工具调用等机制&#xff0c;为大模型装上…

路由策略与路由控制实验

AR1、AR2、AR3在互联接口、Loopback0接口上激活OSPF。AR3、AR4属于IS-IS Area 49.0001&#xff0c;这两者都是Level-1路由器&#xff0c;AR3、AR4的系统ID采用0000.0000.000x格式&#xff0c;其中x为设备编号 AR1上存在三个业务网段A、B、C&#xff08;分别用Loopback1、2、3接…

uniapp开发微信小程序笔记8-uniapp使用vant框架

前言&#xff1a;其实用uni-app开发微信小程序的首选不应该是vant&#xff0c;因为vant没有专门给uni-app设置专栏&#xff0c;可以看到目前Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 但是vant的优…

Qt-系统相关(1)事件文件

Qt事件 事件介绍 事件是应⽤程序内部或者外部产⽣的事情或者动作的统称。在 Qt 中使⽤⼀个对象来表⽰⼀个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本⾝在不同的时刻发出的。当⽤⼾按下⿏标、敲下键盘&#xff0c;或者是窗⼝需要重新绘制的时候&a…

HarmonyOS4+NEXT星河版入门与项目实战(20)------状态管理@ObjectLink @Observed

文章目录 1、用法图解2、案例实现1、任务类改造2、参数改造变量3、完整代码4、运行效果4、总结1、用法图解 2、案例实现 上一节的案例中,一直有一个功能没有生效,就是任务完成后对应的任务行变灰,任务字体出现中划线删除的效果。而该功能一直不生效的原因就是要改变的数据值…

【小白学机器学习36】关于独立概率,联合概率,交叉概率,交叉概率和,总概率等 概念辨析的例子

目录 1 先说结论 2 联合概率 3 边缘概率 4 (行/列)边缘概率的和 总概率1 5 条件概率 5.1 条件概率的除法公式 5.2 条件概率和联合概率区别 1 先说结论 关于独立概率&#xff0c;联合概率&#xff0c;交叉概率&#xff0c;交叉概率和&#xff0c;总概率 类型含义 …