使用 docker 部署 MySQL 会导致数据丢失吗

news/2024/4/26 13:24:20/文章来源:https://blog.csdn.net/weixin_44062052/article/details/129270530

2023年2月28日,今天下午电话面试 java 岗位,经过一些提问后,面试官问了一个问题,“那么你最近在关注什么方面的技术点呢?”,可能是我之前的回答不太理想,且说辞都是“不好意思,可能最近没有太经常使用这方面的东西。”(其实就是忘了)。

我说“最近在读关于SpringCloud 分布式微服务的书。” 本以为他会接着问一些SpringCloud相关的技术点。结果...

面试官,“嗯嗯,那么docker用过吗?”
我一整个没反应过来。然后简单讲了一下docker的概念。

问题

问了一个我没面对过的问题。
使用 docker 部署 mysql,如果服务器宕机重启,会有什么结果。
在这里插入图片描述
面试官尝试引导我。
会不会影响mysql的存储。
“我觉得不会啊。”全凭直觉说的,甚至没有测试过这种情况。
他直接就问了,使用docker部署mysql服务,如果服务器重启后,mysql的数据还在吗?
我说在啊,然后一顿扯皮。
实际上对 docker 的一些概念还是有点模糊,所以导致临场发挥啥也说不明白。

docker 理解为 一台虚拟机
镜像 image 理解为 一个安装包
容器 container 理解为 通过镜像安装好的应用

docker 部署 MySQL

  1. 下载 MySQL安装包(pull image,拉取镜像)
  2. 安装 MySQL安装包(run image,运行镜像)
  3. 启动 MySQL服务(start container,启动容器)

正文

回来以后查了一下这个问题。确实存在这种数据消失的情况。
但实际上并不是 docker 服务器重启之后 MySQL 数据丢失,而是 MySQL 部署在 docker 的容器中,如果此容器被 docker rm 掉。然后重新 run 一个 MySQL 容器,此时 原有的 MySQL 容器中的数据确实丢失了。
丢弃 docker 这个概念,本质上就是安装一个 MySQL 卸载了,然后又安装一个 MySQL ,那么第一个 MySQL 中的数据肯定没有了。
思路理清了,验证一下。

验证docker、MySQL容器重启后,数据不会丢失

首先 在启动的 MySQL容器中创建一个数据库并添加表和数据

在这里插入图片描述

上图,为启动着的 MySQL 容器,现在用 navicat 链接这个 MySQL服务,创建一个数据库,创建表,创建数据。

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

上图,cloud是之前启动的 MySQL 容器,并且保存了数据

现在模拟 docker 服务重启
在这里插入图片描述

重启完毕
检查容器状态

在这里插入图片描述

docker 服务重启,导致内部的容器也被停止
此时,启动容器,然后通过 navicat 链接数据库,查看刚才建的库表以及数据是否丢失。

在这里插入图片描述

在这里插入图片描述

打开链接

在这里插入图片描述

打开数据库

在这里插入图片描述

发现表和数据都在

总结,docker 宕机的情况下 将容器重启,MySQL的数据不会丢失。

删除 MySQL容器,重新 run MySQL镜像,数据会丢失的解决方案

参考此链接
使用 外部数据卷 Bind mount a volume
在这里插入图片描述
在这里插入图片描述

执行 docker run --help
使用 -v 来绑定一个 docker 外部数据卷

在这里插入图片描述

上图,运行mysql 5.7的镜像,
docker run  使用docker 服务 执行 run 命令
-d 后台运行
-p 接口映射
-v 将/usr/local/mysql5.7 事先创建好的文件夹  映射为 容器内的路径 /var/lib/mysql
-e 是配置环境变量,设置一下密码
--name 给容器命名
mysql:5.7  run 这个 mysql 版本是  5.7
---------------------------------------------------
然后, 尝试链接这个新建的MySQL服务

在这里插入图片描述

在这里插入图片描述

新的链接,继续执行前面的脚本
create database testdatabase;
use testdatabase;
create table test_table(id int primary key,`name` varchar(5)
);
insert into test_table values(1,'aa'),(2, 'bb');

在这里插入图片描述

数据表创建完毕,停容器,删容器,再重新执行一遍,运行容器的命令。

在这里插入图片描述

尝试链接数据库看数据是否已经被持久化。

在这里插入图片描述

发现,之前添加的库表都在。
查看一下我们启动 MySQL容器时外挂的文件夹内容是否有变化

在这里插入图片描述

发现已经生成了很多文件,可以观察到 刚创建的数据库  testdatabase

总结

docker 部署 MySQL服务,只有 MySQL 容器被删除的情况下,数据会丢失。可以通过 docker 外挂宿主机的文件夹,来存储 MySQL 的数据。并且当重新运行一个 MySQL 镜像时,也要外挂同一个文件夹,确保容器能读取到先前删除的容器内的数据。

面试并不总是一帆风顺的,有的面试确实是技术碾压,有的面试确实可以为自己查缺补漏,虽然 java 技术栈的学习不能面面俱到,但对技术的追求还是要以此为目标持续下去。

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

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

相关文章

0224多态

目录 一、多态的引入 二、方法的多态 一、重载 二、重写 三、对象的多态(核心) 四、应用实例 五、向上转型 六、向下转型 七、属性没有重写 八、练习题 第一题 第二题 一、多态的引入 通过主人给宠物喂食这个例子,说明多态的必要性&…

K_A13_002 基于STM32等单片机驱动干簧管传感器 串口与OLED0.96双显示

K_A13_002 基于STM32等单片机驱动干簧管传感器 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明模块工作原理:对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC干簧管传感器模块1.2、STM32F103C8T6干簧管传感器模块五、基础知识学习与相关资料…

Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别

PythonYolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonYolov5跌倒摔倒人体特征识别>>编写代码&#xff0c;代码整洁&…

数据结构前提知识

数据结构数据结构 个体的存储个体关系的存储算法对存储数据的操作程序数据结构算法衡量算法的标准时间复杂度&#xff1a;注意不是程序执行的时间&#xff0c;因为一个程序执行的时间取决于软硬件环境&#xff0c;不同的机器&#xff0c;执行的速度不一样&#xff0c;配置好的…

CVPR 2023 接收结果出炉!再创历史新高!录用2360篇!(附10篇最新论文)

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达点击进入—>【计算机视觉】微信技术交流群2023 年 2 月 28 日凌晨&#xff0c;CVPR 2023 顶会论文接收结果出炉&#xff01;这次没有先放出论文 ID List&#xff0c;而是直接 email 通知作…

最好的 QML 教程,让你的代码飞起来!

想必大家都知道&#xff0c;亮哥一直深耕于 CSDN&#xff0c;坚持了好很多年&#xff0c;目前为止&#xff0c;原创已经 500 多篇了&#xff0c;一路走来相当不易。当然了&#xff0c;中间有段时间比较忙&#xff0c;没怎么更新。就拿 QML 来说&#xff0c;最早的一篇文章还是 …

Linux内核崩溃 dump调试

内核-crash(崩溃)&#xff0c;oops消息&#xff0c;dump oops &#xff08;也称 panic&#xff09;&#xff0c;称程序运行崩溃&#xff0c;程序崩溃后会产生oops消息。 应用程序或内核线程的崩溃都会产生oops消息&#xff0c;通常发生oops时&#xff0c;系统不会发生死机&a…

中文预训练大模型—文心Ernie技术原理

文心Ernie技术原理 一、背景技术 Ernie是基于Bert模型进行改进&#xff0c;基本模型是Transformer&#xff0c;Bert完成的预训练任务是&#xff1a;完形填空&#xff08;通过基本语言单元掩码&#xff09;&#xff1b;上下句预测。 Bert模型的缺陷是&#xff1a;只能捕获局部…

【Spark分布式内存计算框架——Spark Streaming】9. 获取偏移量 应用案例:百度搜索风云榜(上)

4.4 获取偏移量 当SparkStreaming集成Kafka时&#xff0c;无论是Old Consumer API中Direct方式还是New Consumer API方式获取的数据&#xff0c;每批次的数据封装在KafkaRDD中&#xff0c;其中包含每条数据的元数据信息。 文档&#xff1a;http://spark.apache.org/docs/2.4.…

Linux系统介绍及熟悉Linux基础操作

一、什么是Liunx Linux&#xff0c;全称GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09;于1991年10月5日首次发布&#xff0c;它主要受到Minix和Unix思想的启发&am…

【图像处理】数字图像处理基础(分辨率,像素,显示...)

Table of Contents1.数字图像处理基础1.1 图像表示1.1.1 图像成像模型1.1.2 数字图像的表示a.图像采样b.图像灰度的量化c.算比特数1.2 分辨率1.2.1 空间分辨率1.2.2 灰度分辨率1.3 像素间的关系1.3.1 像素邻域a.4邻域b.4对角邻域c.8邻域1.3.2 像素邻接1.3.3 像素连通1.3.4 像素…

“速通“ 老生常谈的HashMap [实现原理源码解读]

&#x1f473;我亲爱的各位大佬们好&#x1f618;&#x1f618;&#x1f618; ♨️本篇文章记录的为 HashMap 实现原理&&源码解读 相关内容&#xff0c;适合在学Java的小白,帮助新手快速上手,也适合复习中&#xff0c;面试中的大佬&#x1f649;&#x1f649;&#x1f…

【Leedcode】栈和队列必备的面试题(第二期)

【Leedcode】栈和队列必备的面试题&#xff08;第二期&#xff09; 文章目录【Leedcode】栈和队列必备的面试题&#xff08;第二期&#xff09;一、题目&#xff08;用两个队列实现栈&#xff09;二、思路图解1.定义两个队列2.初始化两个队列3.往两个队列中放入数据4.两个队列出…

对账平台设计

背景 随着公司业务的蓬勃发展&#xff0c;交易履约清结算业务的复杂性也在不断的增高&#xff0c;资金以及各种数据的一致性和准确性也变得越发重要。 以交易链路为例&#xff0c;存在着如下一些潜在的不一致场景&#xff1a; 订单支付成功了&#xff0c;但是订单状态却还是“…

JVM方法区详解有这篇就够了

1、方法区在哪里《Java虚拟机规范》中明确说明&#xff1a;“尽管所有的方法区在逻辑上是属于堆的一部分&#xff0c;但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言&#xff0c;方法区还有一个别名叫做Non-Heap&#xff08;非堆&#xff09…

机械键盘不只有轴体的区别!键帽高度也有些学问

键盘键帽的学问有很多&#xff0c;上篇文章中&#xff0c;笔者和大家聊了键帽的材质和耐油污的问题。 除此之外&#xff0c;键帽的高度和字符的印刷方式也有不同&#xff0c;对于多数机械键盘来说&#xff0c;会发现每一列键帽的倾斜角度都略有不同&#xff0c;使用起来可以减少…

Android TV UI开发常用知识

导入依赖 Google官方为Android TV的UI开发提供了一系列的规范组件&#xff0c;在leanback的依赖库中&#xff0c;这里介绍一些常用的组件&#xff0c;使用前需要导入leanback库。 implementation androidx.leanback:leanback:$version常用的页面 这些Fragment有设计好的样式&…

3.ffmpeg命令行环境搭建、ffmpeg命令行初步了解

在上章,我们讲过: ffmpeg.exe: 主要用于转码或者剪切的应用程序, 也可以从url/现场音频/视频源抓取输入源ffplay.exe: 主要用于播放视频的应用程序,该应用程序源码是开源的,我们后面章节会去源码分析ffprobe.exe: 主要用于分析视频码流的应用程序, 可以获取媒体文件的详细信息,…

【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Data Factory】系列。 接上文【Azure 架构师学习笔记】-Azure Data Factory (3)-触发器详解-翻转窗口 前言 事件触发指的是存储事件&#xff0c;所以在新版的ADF 中&#xff0c;已经明确了是“存储事件”&#xff0c;…

【C语言】结构体进阶

一、结构体 1. 结构体的声明 &#xff08;1&#xff09; 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。&#xff08;2&#xff09;结构的声明 struct tag {member-list; }variable-list;例如描述一个学生&#x…