当前位置: 首页 > article >正文

Docker中mysql镜像保存与导入

一、Docker中mysql镜像保存

Docker 的 MySQL 镜像保存通常有两种场景:一种是保存镜像本身的修改(如配置、初始化数据),另一种是持久化保存容器运行时产生的数据(如数据库表、用户数据)。以下是具体方法:


方法 1:保存镜像修改(通过 docker commit

如果修改了容器内的配置或希望保存初始化数据,可以将容器提交为新的镜像:

# 1. 停止 MySQL 容器
docker stop <container_name># 2. 提交容器为新的镜像
docker commit <container_name> my-mysql-custom# 3. 保存镜像为 .tar 文件(可选,用于迁移或备份)
docker save my-mysql-custom > my-mysql-custom.tar

注意事项:

  • 不推荐长期依赖此方法:数据库数据频繁变化,镜像体积会膨胀。
  • 适合保存初始配置(如修改 my.cnf 或预装工具),不适合保存动态数据。

方法 2:持久化数据(使用 Docker Volumes)

MySQL 的官方镜像默认将数据存储在容器内的 /var/lib/mysql。为了永久保存数据,需通过**卷(Volume)绑定挂载(Bind Mount)**将数据映射到宿主机。

方案 1:使用 Docker Volume

# 1. 创建 Volume
docker volume create mysql_data# 2. 启动容器时挂载 Volume
docker run -d \--name mysql-container \-e MYSQL_ROOT_PASSWORD=your_password \-v mysql_data:/var/lib/mysql \mysql:tag# 数据会永久保存在 Volume 中

方案 2:使用宿主机目录(Bind Mount)

# 1. 创建宿主机目录
mkdir -p /host/path/mysql/data# 2. 启动容器时绑定目录
docker run -d \--name mysql-container \-e MYSQL_ROOT_PASSWORD=your_password \-v /host/path/mysql/data:/var/lib/mysql \mysql:tag# 数据会永久保存在宿主机的 /host/path/mysql/data 目录

如何备份数据?

# 直接备份 Volume 或绑定目录的内容
cp -r /host/path/mysql/data /backup/mysql-data

方法 3:导出数据库内容(通过 mysqldump

即使不保存镜像或卷,也可以通过 SQL 导出数据:

# 1. 导出数据库到 SQL 文件
docker exec mysql-container \mysqldump -u root -p"your_password" --all-databases > backup.sql# 2. 恢复数据到新容器
cat backup.sql | docker exec -i new-mysql-container \mysql -u root -p"your_password"

总结

场景推荐方法
保存镜像配置docker commit + docker save
持久化动态数据VolumeBind Mount
迁移或备份数据库mysqldump 导出 SQL

关键原则:

  • 数据库动态数据(如表、用户)永远通过 Volume/Bind Mount 持久化。
  • 镜像仅用于保存静态配置(如预置的 my.cnf 或初始化脚本)。
  • 定期使用 mysqldump 备份 SQL 更安全可靠。

二、导入保存的Mysql镜像

以下是导入已保存的 MySQL 镜像及其数据的完整方法,具体取决于你之前保存镜像或数据的方式:


场景 1:导入通过 docker save 保存的镜像文件(.tar 格式)

如果镜像通过 docker save 导出为 .tar 文件(如 my-mysql-custom.tar),按以下步骤导入:

步骤:

# 1. 导入镜像到本地 Docker
docker load -i my-mysql-custom.tar# 2. 查看是否导入成功
docker images
# 应看到名为 `my-mysql-custom` 的镜像# 3. 运行容器(注意挂载数据卷)
docker run -d \--name mysql-restored \-e MYSQL_ROOT_PASSWORD=your_password \-v mysql_data:/var/lib/mysql \  # 挂载 Volume 确保数据持久化my-mysql-custom

关键说明:

  • 镜像不包含动态数据:如果原镜像通过 docker commit 保存了容器内的数据(如 /var/lib/mysql),新容器默认仍会覆盖这些数据,除非显式挂载 Volume。
  • 必须挂载 Volume:建议启动时挂载 Volume(或绑定宿主机目录),否则容器重启后数据可能丢失。

场景 2:直接使用已存在的自定义镜像(无需 .tar 文件)

如果镜像已存在于本地(如通过 docker commit 生成),直接运行即可:

# 直接启动容器(挂载 Volume)
docker run -d \--name mysql-custom \-e MYSQL_ROOT_PASSWORD=your_password \-v mysql_data:/var/lib/mysql \my-mysql-custom  # 镜像名称

场景 3:恢复通过 mysqldump 导出的 SQL 数据

如果数据通过 mysqldump 导出为 .sql 文件(如 backup.sql),需先启动新容器,再导入数据:

步骤:

# 1. 启动一个全新的 MySQL 容器(挂载 Volume)
docker run -d \--name mysql-new \-e MYSQL_ROOT_PASSWORD=your_password \-v mysql_data:/var/lib/mysql \mysql:tag# 2. 将 SQL 文件导入到容器
cat backup.sql | docker exec -i mysql-new \mysql -u root -p"your_password"# 或手动进入容器执行
docker exec -it mysql-new mysql -u root -p
# 进入 MySQL Shell 后运行 `source backup.sql`

场景 4:恢复 Volume 或绑定目录的数据

如果数据已通过 Volume宿主机目录 持久化,只需挂载原数据路径即可:

方法 1:使用原有 Volume

# 直接挂载原有 Volume(假设 Volume 名称为 `mysql_data`)
docker run -d \--name mysql-restored \-e MYSQL_ROOT_PASSWORD=your_password \-v mysql_data:/var/lib/mysql \mysql:tag  # 可使用原镜像或新镜像

方法 2:使用宿主机备份目录

# 假设备份数据在宿主机的 `/backup/mysql-data` 目录
docker run -d \--name mysql-restored \-e MYSQL_ROOT_PASSWORD=your_password \-v /backup/mysql-data:/var/lib/mysql \mysql:tag

总结:根据需求选择恢复方式

保存方式恢复方法
镜像文件(.tardocker load + 挂载 Volume
本地已有镜像直接 docker run + 挂载 Volume
mysqldump 导出的 SQL启动新容器后通过 mysql 命令导入
Volume 或宿主机目录备份挂载原 Volume 或目录到新容器

注意事项:

  • 镜像仅保存静态配置:数据库动态数据(如表、用户)依赖 Volume 或 SQL 备份恢复。
  • 权限问题:如果使用宿主机目录挂载,确保目录权限允许 MySQL 容器写入(可能需要 chmod -R 777 /host/path 或调整 SELinux/AppArmor 配置)。

相关文章:

Docker中mysql镜像保存与导入

一、Docker中mysql镜像保存 Docker 的 MySQL 镜像保存通常有两种场景&#xff1a;一种是保存镜像本身的修改&#xff08;如配置、初始化数据&#xff09;&#xff0c;另一种是持久化保存容器运行时产生的数据&#xff08;如数据库表、用户数据&#xff09;。以下是具体方法&am…...

【JVM】从零开始深度解析JVM

本篇博客给大家带来的是JVM的知识点, 重点在类加载和垃圾回收机制上. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; …...

算法训练营第十四天|110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和、222.完全二叉树的节点个数

110.平衡二叉树 题目 思路与解法 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def isBalanced(self, r…...

Java单例模式总结

说明&#xff1a;单例模式的核心是确保一个类只有一个实例&#xff0c;并提供全局访问点。饿汉式和懒汉式是两种常见的实现方式 一、饿汉式和懒汉式 1. 饿汉式&#xff08;Eager Initialization&#xff09; public class EagerSingleton {// 类加载时直接初始化实例private…...

在 Elasticsearch 中删除文档中的某个字段

作者&#xff1a;来自 Elastic Kofi Bartlett 探索在 Elasticsearch 中删除文档字段的方法。 更多有关 Elasticsearch 文档的操作&#xff0c;请详细阅读文章 “开始使用 Elasticsearch &#xff08;1&#xff09;”。 想获得 Elastic 认证&#xff1f;查看下一期 Elasticsear…...

OpenCV中适用华为昇腾(Ascend)后端的逐元素操作(Per-element Operations)

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 针对华为昇腾&#xff08;Ascend&#xff09;后端的逐元素操作&#xff08;Per-element Operations&#xff09;&#xff0c;这些操作通常用于图…...

Jenkins集成Maven

一、概述 Jenkins是一个开源的持续集成工具&#xff0c;用于自动化各种开发任务。Maven是一个项目管理和构建自动化工具&#xff0c;主要用于Java项目。通过将Jenkins和Maven集成&#xff0c;可以实现自动化构建、测试和部署&#xff0c;提高开发效率和代码质量。 二、前提条…...

初识Linux · TCP基本使用 · 回显服务器

目录 前言&#xff1a; 回显服务器 TCPserver_v0 TCPserver_v1--多进程版本 TCPserver_v2--多线程版本 前言&#xff1a; 前文我们介绍了UDP的基本使用&#xff0c;本文我们介绍TCP的基本使用&#xff0c;不过TCP的使用我们这里先做一个预热&#xff0c;即只是使用TCP的A…...

Qwen:Qwen3,R1 在 Text2SQL 效果评估

【对比模型】 Qwen3 235B-A22B&#xff08;2350亿总参数&#xff0c;220亿激活参数&#xff09;&#xff0c;32B&#xff0c;30B-A3B&#xff1b;QwQ 32B&#xff08;推理模型&#xff09;DeepSeek-R1 671B&#xff08;满血版&#xff09;&#xff08;推理模型&#xff09; 1&a…...

【layout组件 与 路由镶嵌】vue3 后台管理系统

前言 很多同学在第一次搭建后台管理系统时&#xff0c;会遇到一个问题&#xff0c;layout组件该放哪里&#xff1f;如何使用&#xff1f;路由又该如何设计&#xff1f; 这边会讲一下我的思考过程和最后的结果&#xff0c;大家可以参考一下&#xff0c;希望大家看完能有所收获。…...

mobile自动化测试-appium webdriverio

WebdriverIO是一款支持mobile app和mobile web自动化测试框架&#xff0c;与appium集成&#xff0c;完成对mobile应用测试。支持ios 和android两种平台&#xff0c;且功能丰富&#xff0c;是mobile app自动化测试首选框架。且官方还提供了mobile 应用测试example代码&#xff0…...

Spring Bean有哪几种配置方式?

大家好&#xff0c;我是锋哥。今天分享关于【Spring Bean有哪几种配置方式&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring Bean有哪几种配置方式&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Bean的配置方式主要有三种&#xff…...

解析小米大模型MiMo:解锁语言模型推理潜力

一、基本介绍 1.1 项目背景 在大型语言模型快速发展的背景下,小米AI团队推出MiMo系列模型,突破性地在7B参数规模上实现卓越推理能力。传统观点认为32B以上模型才能胜任复杂推理任务,而MiMo通过创新的训练范式证明:精心设计的预训练和强化学习策略,可使小模型迸发巨大推理…...

证券行业数字化转型:灵雀云架设云原生“数字高速路”

01 传统架构难承重负&#xff0c;云原生破局成必然 截至2024年&#xff0c;证券行业总资产突破35万亿元&#xff0c;线上交易占比达85%&#xff0c;高频交易、智能投顾等业务对算力与响应速度提出极限要求。然而&#xff0c;以虚拟化为主导的传统IT架构面临四大核心瓶颈&#…...

Centos系统详解架构详解

CentOS 全面详解 一、CentOS 概述 CentOS&#xff08;Community Enterprise Operating System&#xff09; 是基于 Red Hat Enterprise Linux&#xff08;RHEL&#xff09; 源代码构建的免费开源操作系统&#xff0c;专注于稳定性、安全性和长期支持&#xff0c;广泛应用于服…...

【后端】SpringBoot用CORS解决无法跨域访问的问题

SpringBoot用CORS解决无法跨域访问的问题 一、跨域问题 跨域问题指的是不同站点之间&#xff0c;使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制&#xff0c;它的初衷是为了保证用户的安全&#xff0c;防止恶意网站窃取数据。但这个保护机制也带来了新的…...

MySQL 8.0(主从复制)

MySQL 8.0 的 主从复制&#xff08;Master-Slave Replication&#xff09; 是一种数据库高可用和数据备份的核心技术&#xff0c;下面用 一、什么是主从复制&#xff1f; 就像公司的「领导-秘书」分工&#xff1a; 主库&#xff08;Master&#xff09;&#xff1a;负责处理所…...

TCPIP详解 卷1协议 十 用户数据报协议和IP分片

10.1——用户数据报协议和 IP 分片 UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。它提供差错检测&#xff0c;包含我们在传输层中碰到的第一个真实的端到端&#xff08;end-to-end&#xff09;校验和。这…...

finebi使用资源迁移无法导入资源,解决方法

finebi使用资源迁移无法导入资源&#xff0c;解决方法 最近在使用finebi开发finebi报表&#xff0c;报表开发之后&#xff0c;从一台电脑将资源导入另一台电脑后&#xff0c;出现不允许导入的提示&#xff0c;如下&#xff1a; 原因&#xff1a; 两个finebi的管理员名称不一致…...

【ASR学习笔记】:语音识别领域基本术语

一、基础术语 ASR (Automatic Speech Recognition) 自动语音识别&#xff0c;把语音信号转换成文本的技术。 VAD (Voice Activity Detection) 语音活动检测&#xff0c;判断一段音频里哪里是说话&#xff0c;哪里是静音或噪音。 Acoustic Model&#xff08;声学模型&#xff0…...

精益数据分析(53/126):双边市场模式指标全解析与运营策略深度探讨

精益数据分析&#xff08;53/126&#xff09;&#xff1a;双边市场模式指标全解析与运营策略深度探讨 在创业与数据分析的探索之路上&#xff0c;深入了解各类商业模式的关键指标和运营策略至关重要。今天&#xff0c;我们依然怀揣着与大家共同进步的信念&#xff0c;深入研读…...

分布式锁redisson的中断操作

1、先贴代码 RequestMapping(value "/update", method RequestMethod.POST)ResponseBodypublic Result update(RequestBody Employee employee) { // 修改数据库&#xff08;存在线程不安全 需要使用redison设置分布式锁 防止被修改&#xff09; // 设…...

【技巧】使用frpc点对点安全地内网穿透访问ollama服务

回到目录 【技巧】使用frpc点对点安全地内网穿透访问ollama服务 0. 为什么需要部署内网穿透点对点服务 在家里想访问单位强劲机器&#xff0c;但是单位机器只能单向访问互联网&#xff0c;互联网无法直接访问到这台机器。通过在云服务器、单位内网服务器、源端访问机器上&am…...

Django缓存框架API

这里写自定义目录标题 访问缓存django.core.cache.cachesdjango.core.cache.cache 基本用法cache.set(key, value, timeoutDEFAULT_TIMEOUT, versionNone)cache.get(key, defaultNone, versionNone)cache.add(key, value, timeoutDEFAULT_TIMEOUT, versionNone)cache.get_or_se…...

克隆虚拟机组成集群

一、克隆虚拟机 1. 准备基础虚拟机 确保基础虚拟机已安装好操作系统&#xff08;如 Ubuntu&#xff09;、Java 和 Hadoop。关闭防火墙并禁用 SELinux&#xff08;如适用&#xff09;&#xff1a; bash sudo ufw disable # Ubuntu sudo systemctl disable firewalld # CentO…...

Docker:安装配置教程(最新版本)

文章目录 一、前言二、具体操作2.1 卸载 Docker (可选)2.2 重新安装&#xff08;使用清华大学镜像&#xff09;2.3 配置轩辕镜像加速2.4 Docker 基本命名2.5 测试是否成功 三、结语 一、前言 Docker 是一种容器化技术&#xff0c;在软件开发和部署中得到广泛的应用&#xff0c…...

R语言实战第5章(1)

第一部分&#xff1a;数学、统计和字符处理函数 数学和统计函数&#xff1a;R提供了丰富的数学和统计函数&#xff0c;用于执行各种计算和分析。这些函数可以帮助用户快速完成复杂的数学运算、统计分析等任务&#xff0c;例如计算均值、方差、相关系数、进行假设检验等。字符处…...

Redis设计与实现——单机Redis实现

RedisDB RedisDB的核心结构 键空间&#xff08;dict*dict&#xff09; 结构&#xff1a;哈希表&#xff08;字典&#xff09;&#xff0c;键为字符串对象&#xff08;SDS&#xff09;&#xff0c;值为 Redis 对象&#xff08;字符串、列表、哈希等&#xff09;。 功能&#x…...

neo4j官方示例

目录 一、准备数据 1.执行查看结果 二、操作 1.find 单个节点 2.同上&#xff0c;已某个属性去查询 3. 指定查询个数 4.条件查询 5.查询某个人出演的电影汇总 6.查询tom出演的电影中&#xff0c;还有其他演员的信息。 7.查询跟电影(Cloud Atlas)有关的演员&#xff0…...

探讨关于智能体(Agent)结合 Dify、大语言模型(LLM)以及 Qwen-3 模型的项目或概念

1. Dify 的作用 Dify 是一个开源的 AI 框架&#xff0c;它可以帮助开发者快速搭建和部署 AI 应用。它可以作为一个基础架构&#xff0c;为智能体提供以下支持&#xff1a; 应用开发与部署&#xff1a;Dify 可以帮助开发者快速搭建智能体的前端和后端架构&#xff0c;包括用户界…...