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.pswp.cn/pingmian/80321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80321.shtml
英文地址,請注明出處:http://en.pswp.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;但是之前一直都是…