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 配置)。

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

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

相关文章

大模型微调指南之 LLaMA-Factory 篇:一键启动LLaMA系列模型高效微调

文章目录 一、简介二、如何安装2.1 安装2.2 校验 三、开始使用3.1 可视化界面3.2 使用命令行3.2.1 模型微调训练3.2.2 模型合并3.2.3 模型推理3.2.4 模型评估 四、高级功能4.1 分布训练4.2 DeepSpeed4.2.1 单机多卡4.2.2 多机多卡 五、日志分析 一、简介 LLaMA-Factory 是一个…

记录一次window2012r2安装配置oracle11g的过程-出现的错误以及解决方法

Windows server 2012R2安装Oracle11g 出现的错误 同事反馈正常安装oracle后&#xff0c; 使用命令行 sqlplus sys / as sysdba出现“ORA-12560:TNS:协议适配器错误”。 去services.msc服务状态里面 OracleOraDb11g_home1TNSListener服务停止状态&#xff0c;而且无法启动。 …

2003-2020年高铁线路信息数据

2003-2020年高铁线路信息数据 1、时间&#xff1a;2003-2020年 2、来源&#xff1a;Chinese High-speed Rail and Airline Database&#xff0c;CRAD 3、指标&#xff1a;高铁线路名称、起点名、终点名、开通时间、线路长度(km)、设计速度(km/h&#xff09;、沿途主要车站 …

【论文阅读】FreePCA

FreePCA: Integrating Consistency Information across Long-short Frames in Training-free Long Video Generation via Principal Component Analysis 原文摘要 问题背景 核心挑战&#xff1a; 长视频生成通常依赖在短视频上训练的模型&#xff0c;但由于视频帧数增加会导致数…

Linux:线程同步与互斥

目录 线程互斥 锁 初始化 销毁 加锁 解锁 线程同步 条件变量 初始化 销毁 等待条件满足 唤醒等待 pthread_cond_signal pthread_cond_broadcast 生产者消费者模型 3种关系 2种角色 1个交易场所 POSIX信号量 初始化 销毁 等待 发布 线程互斥 互斥相关…

LeetCode --- 448 周赛

题目列表 3536. 两个数字的最大乘积 3537. 填充特殊网格 3538. 合并得到最小旅行时间 3539. 魔法序列的数组乘积之和 一、两个数字的最大乘积 由于数据都是正数&#xff0c;所以乘积最大的两个数&#xff0c;本质就是找数组中最大的两个数即可&#xff0c;可以排序后直接找到…

Azure Document Intelligence

Azure Document Intelligence(以前称为 Form Recognizer)是一项云服务&#xff0c;可用于从文档中提取文本、键值对、表等信息。下面是一个使用 Python SDK 进行文档转换和提取信息的基本示例。 1. 安装依赖 首先&#xff0c;你需要安装 azure-ai-formrecognizer 库&#xff0c…

51单片机快速成长路径

作为在嵌入式领域深耕18年的工程师&#xff0c;分享一条经过工业验证的51单片机快速成长路径&#xff0c;全程干货无注水&#xff1a; 一、突破认知误区&#xff08;新手必看&#xff09; 不要纠结于「汇编还是C」&#xff1a;现代开发90%场景用C&#xff0c;掌握指针和内存管…

SQLite数据库加密(Java语言、python语言)

1. 背景与需求 SQLite 是一种轻量级的关系型数据库,广泛应用于嵌入式设备、移动应用、桌面应用等场景。为了保护数据的隐私与安全,SQLite 提供了加密功能(通过 SQLCipher 扩展)。在 Java 中,可以使用 sqlite-jdbc 驱动与 SQLCipher 集成来实现 SQLite 数据库的加密。 本…

《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门

第53篇&#xff1a;Hugging Face生态系统入门 ——从模型获取到部署的全流程实战指南 &#x1f4cc; 摘要 在人工智能快速发展的今天&#xff0c;Hugging Face已成为自然语言处理&#xff08;NLP&#xff09;领域最具影响力的开源平台之一。它不仅提供丰富的预训练模型、强大…

什么是向量数据库?向量数据库和关系数据库有什么区别?

什么是向量数据库&#xff1f; 向量数据库是一种专门设计用来存储、索引和查询向量数据的数据库系统。在当今的人工智能和机器学习领域中&#xff0c;向量数据库变得越来越重要&#xff0c;尤其是在处理高维数据如图像、音频和文本等非结构化数据时。 主要用途 相似度搜索&…

关于甲骨文(oracle cloud)丢失MFA的解决方案

前两年&#xff0c;申请了一个招商的多币种信用卡&#xff0c;然后就从网上撸了一个oracle的免费1h1g的服务器。 用了一段时间&#xff0c;人家要启用MFA验证。 啥叫MFA验证&#xff0c;类似与短信验证吧&#xff0c;就是绑定一个手机&#xff0c;然后下载一个app&#xff0c;每…

基于Arduino Nano的DIY示波器

基于Arduino Nano的DIY示波器&#xff1a;打造属于你的口袋实验室 前言 在电子爱好者的世界里&#xff0c;示波器是不可或缺的工具之一。它能够帮助我们观察和分析各种电子信号的波形&#xff0c;从而更好地理解和调试电路。然而&#xff0c;市面上的示波器价格往往较高&…

LeetCode 解题思路 47(最长回文子串、最长公共子序列)

解题思路&#xff1a; dp 数组的含义&#xff1a; dp[i][j] 是否为回文子串。递推公式&#xff1a; dp[i][j] s.charAt(i) s.charAt(j) && dp[i 1][j - 1]。dp 数组初始化&#xff1a; 单字符 dp[i][i] true&#xff0c;双字符 dp[i][i 1] s.charAt(i) s.charA…

通过管道实现C++ Linux独立进程之间的通信和字符串传递

在Linux环境下&#xff0c;独立进程之间的通信&#xff08;IPC&#xff09;可以通过多种方式实现&#xff0c;包括管道、消息队列、共享内存和套接字。本文将详细介绍如何使用管道&#xff08;pipe&#xff09;在C中实现独立进程之间的通信&#xff0c;并传递字符串。 一、管道…

神经网络极简入门技术分享

1. 引言 神经网络是深度学习的基础&#xff0c;其设计灵感来源于人脑神经元的结构和工作方式。尽管现代神经网络已经变得异常复杂&#xff0c;但其核心原理却相对简单易懂。本报告旨在通过剖析神经网络的最基本单元——神经元&#xff0c;帮助初学者理解神经网络的工作原理。 …

五、Hadoop集群部署:从零搭建三节点Hadoop环境(保姆级教程)

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月7日 专栏&#xff1a;Hadoop教程 前言&#xff1a; 想玩转大数据&#xff0c;Hadoop集群是绕不开的一道坎。很多小伙伴一看到集群部署就头大&#xff0c;各种配置、各种坑。别慌&#xff01;这篇教程就是你的“救生圈”。 …

科研项目管理:4款高效工具推荐与效率提升实践

一般来说&#xff0c;科研项目往往涉及复杂的任务、跨部门协作以及严格的时间和预算限制。传统的管理方式&#xff0c;如电子表格或邮件沟通&#xff0c;难以应对多任务并行、资源分配复杂的需求。借助现代项目管理工具&#xff0c;研究人员能够优化工作流程、提升团队协作效率…

如何统一修改word中所有英文字母的字体格式

1.需求分析 我想让整篇论文中的所有英文字母格式都修改为Time New Roman格式。 2.直观操作流程 点击左上角开始 --> 点击替换 --> 点击更多 --> 点击特殊格式 --> 选择查找内容为任意字母(Y) --> 将光标点到替换内容 --> 点击格式 --> 点击字体 --> …

【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案

本文由Markdown语法编辑器编辑完成&#xff0e; 1.背景: 之前从同事手里接手了一个java的项目&#xff0c;是用maven构建项目的&#xff0e;由于我们的服务都是基于docker来部署的&#xff0c;因此这个java项目也是要编译成docker image然后发布&#xff0e;但是之前一直都是…