最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ubuntu下Docker部署MySQL數(shù)據(jù)持久化實戰(zhàn)

 更新時間:2026年07月14日 09:24:46   作者:Moshow鄭鍇  
本文介紹了在Ubuntu系統(tǒng)下通過Docker部署MySQL并實現(xiàn)數(shù)據(jù)持久化的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、問題引入:為什么需要數(shù)據(jù)持久化?

在用 Docker 跑 MySQL 時,很多新手會遇到一個棘手問題:容器重啟或刪除后,所有數(shù)據(jù)庫數(shù)據(jù)全沒了

這是因為 MySQL 容器默認(rèn)把數(shù)據(jù)存儲在容器內(nèi)部的 /var/lib/mysql 目錄。而容器本身是“無狀態(tài)”的——刪除容器后,其中的所有數(shù)據(jù)也隨之消失。如果在部署時沒有做特殊配置,每次啟動容器都得重新建庫建表,數(shù)據(jù)無法延續(xù)。

解決方案也很直接:把 MySQL 的數(shù)據(jù)存儲目錄“遷”到宿主機(jī)(即 Ubuntu 系統(tǒng))的某個目錄下,通過 Docker 掛載的方式讓容器讀取外部數(shù)據(jù)。這樣,無論容器怎么折騰,數(shù)據(jù)都安安穩(wěn)穩(wěn)地留在宿主機(jī)上。本文會從零開始,詳細(xì)介紹如何在 Ubuntu 下用 Docker 部署 MySQL,并實現(xiàn)數(shù)據(jù)持久化。

前置準(zhǔn)備:本文假設(shè)你的 Ubuntu 系統(tǒng)已經(jīng)安裝了 Docker。如果尚未安裝,可參考以下命令快速安裝:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl start docker && systemctl enable docker
docker -v   # 輸出版本號即成功

二、核心概念:兩種數(shù)據(jù)持久化方案

Docker 提供兩種主要的數(shù)據(jù)持久化方式:

綁定掛載(Bind Mount) —— 將宿主機(jī)的某個目錄“映射”到容器內(nèi)的指定路徑。數(shù)據(jù)直接存放在你指定的宿主機(jī)目錄中,一目了然,便于管理和查看。下文主要采用這種方式。

命名卷(Named Volume) —— 由 Docker 管理的數(shù)據(jù)存儲卷,自動處理權(quán)限和存儲路徑,支持卷備份和遷移,適合正式生產(chǎn)環(huán)境。

兩者都能實現(xiàn)持久化,綁定掛載更直觀,下文將以此為基礎(chǔ)展開。

三、實戰(zhàn):在 Ubuntu 上部署持久化的 MySQL 容器

3.1 創(chuàng)建數(shù)據(jù)存儲目錄

在宿主機(jī)上創(chuàng)建一個目錄來存放 MySQL 數(shù)據(jù)(你可以根據(jù)需要自定義路徑):

sudo mkdir -p /data/mysql/{data,conf,logs}

這個命令會創(chuàng)建三個子目錄:

  • data → 存放 MySQL 實際的數(shù)據(jù)文件
  • conf → 存放自定義配置文件(可選)
  • logs → 存放日志文件

3.2 設(shè)置目錄權(quán)限(關(guān)鍵避坑點(diǎn))

這是最容易踩坑的地方。MySQL 容器默認(rèn)以 mysql 用戶(UID 和 GID 均為 999)運(yùn)行,如果宿主機(jī)目錄的權(quán)限不匹配,MySQL 將無法寫入數(shù)據(jù),容器啟動時會報 Permission denied 錯誤。(優(yōu)選)

# 將目錄所有權(quán)交給 MySQL 容器使用的用戶(UID 999) 
sudo chown -R 999:999 /data/mysql

如果只是想快速測試,也可以臨時賦予 777 權(quán)限:

sudo chmod -R 777 /data/mysql

避坑提示忘記設(shè)置權(quán)限是導(dǎo)致 MySQL 容器啟動失敗的最常見原因之一。如果容器啟動后很快就退出了,用 docker logs <容器名> 查看日志,如果看到類似 Can't create/write to file '/var/lib/mysql/...' 的錯誤,十有八九是權(quán)限問題。

3.3 拉取 MySQL 鏡像

建議指定具體版本號,避免使用 latest 標(biāo)簽導(dǎo)致意外的版本升級問題:

docker pull mysql:9.7.0

也可以到https://hub.docker.com/_/mysql 檢查mysql版本,右側(cè)可以選擇版本并獲得pull命令

3.4 啟動 MySQL 容器(綁定掛載方式)

docker run -d \
  --name mysql-persistent \
  --restart always \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -e TZ=Asia/Shanghai \
  -v /data/mysql/data:/var/lib/mysql \
  -v /data/mysql/conf:/etc/mysql/conf.d \
  -v /data/mysql/logs:/var/log/mysql \
  mysql:9.7.0 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci

【各參數(shù)說明】 :

  • -d:后臺運(yùn)行
  • --name:給容器起個名字,方便管理
  • --restart always:容器退出時自動重啟,保證服務(wù)高可用
  • -p 3306:3306:端口映射,宿主機(jī) 3306 映射到容器 3306
  • -e MYSQL_ROOT_PASSWORD:設(shè)置 root 密碼(需包含大小寫+數(shù)字+特殊字符)
  • -e TZ=Asia/Shanghai:設(shè)置時區(qū)
  • -v:綁定掛載,格式為 宿主機(jī)路徑:容器內(nèi)路徑
  • --character-set-server=utf8mb4:字符集,支持 emoji
  • --collation-server=utf8mb4_unicode_ci:排序規(guī)則

3.5 驗證結(jié)果

moshow@moshow-ubuntu:~/Downloads$ docker pull mysql:9.7.0
9.7.0: Pulling from library/mysql
9c6d3f438d99: Download complete 
b3e52f10da63: Download complete 
1dced004aaec: Pull complete 
8e3f19ed5e67: Pull complete 
69edacfaea72: Pull complete 
4f23ccd26206: Pull complete 
802b6dd0c6bd: Pull complete 
35300b480a58: Pull complete 
8ec50bfa3b7e: Pull complete 
5491a2a13e1b: Pull complete 
f74943462a4f: Pull complete 
e80b372994e5: Pull complete 
Digest: sha256:c11782aa2a96624c1efc121768641d96954faa136d6aa82751b032d8c426ffbc
Status: Downloaded newer image for mysql:9.7.0
docker.io/library/mysql:9.7.0
moshow@moshow-ubuntu:~/Downloads$ sudo mkdir -p /data/mysql/{data,conf,logs}
[sudo: authenticate] 密碼:          
moshow@moshow-ubuntu:~/Downloads$ sudo chown -R 999:999 /data/mysql
moshow@moshow-ubuntu:~/Downloads$ docker run -d \
  --name mysql-persistent \
  --restart always \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -e TZ=Asia/Shanghai \
  -v /data/mysql/data:/var/lib/mysql \
  -v /data/mysql/conf:/etc/mysql/conf.d \
  -v /data/mysql/logs:/var/log/mysql \
  mysql:9.7.0 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci
b8124dc936007b7b185bc999ee7d5949d412a23cd784cea8c5a8ca764d4ce8c7
moshow@moshow-ubuntu:~/Downloads$ docker images
                                                                                                           i Info →   U  In Use
IMAGE                ID             DISK USAGE   CONTENT SIZE   EXTRA
hello-world:latest   96498ffd522e       25.9kB         9.49kB    U   
mysql:9.7.0          c11782aa2a96        1.3GB          290MB    U   

四?一鍵安裝DBeaver

4.1 安裝dbeaver

moshow@moshow-ubuntu:~/Downloads$ sudo snap install dbeaver-ce --classic
[sudo: authenticate] 密碼:          
dbeaver-ce 26.1.0.202605311718 (來自 DBeaver (dbeaver-corp)) installed

4.2 建立連接

4.3?? Public Key Retrieval is not allowed錯誤快速修復(fù),允許客戶端獲取公鑰 (推薦測試環(huán)境)

在不同客戶端中的設(shè)置方法:

4DBeaver / DataGrip等通用數(shù)據(jù)庫工具:找到連接設(shè)置,進(jìn)入“驅(qū)動屬性”(Driver properties)頁面,修改allowPublicKeyRetrieval屬性(如果不存在請手動添加),并將值設(shè)為true。

MySQL CLI命令行客戶端:在連接命令中加入--get-server-public-key參數(shù),例如:

mysql -u your_username -p --get-server-public-key

Spring Boot (application.properties):在數(shù)據(jù)源URL中加入該參數(shù)。

spring.datasource.url=jdbc:mysql://localhost:3306/你的數(shù)據(jù)庫?useSSL=false&allowPublicKeyRetrieval=true

?? 安全提醒
此方法僅適用于本地開發(fā)或內(nèi)網(wǎng)測試等受信任的網(wǎng)絡(luò)環(huán)境。因為它允許在不驗證服務(wù)器身份的情況下獲取公鑰,理論上存在被中間人攻擊竊取密碼的風(fēng)險。對于生產(chǎn)環(huán)境,請務(wù)必參考解決方案三。

4.4 測試連接

到此這篇關(guān)于Ubuntu下Docker部署MySQL數(shù)據(jù)持久化實戰(zhàn)的文章就介紹到這了,更多相關(guān)Docker部署MySQL數(shù)據(jù)持久化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 阿里云服務(wù)器部署?Docker?Swarm集群

    阿里云服務(wù)器部署?Docker?Swarm集群

    這篇文章主要介紹了阿里云服務(wù)器部署?Docker?Swarm集群,Docker Swarm 的作用就是用來管理Docker集群的平臺,本文給大家介紹了Docker Swarm的基本概念和Docker Swarm 和 k8s的區(qū)別,需要的朋友可以參考下
    2022-07-07
  • Docker容器部署前端Vue服務(wù)(小白教程)

    Docker容器部署前端Vue服務(wù)(小白教程)

    本文主要介紹了Docker容器部署前端Vue服務(wù),文中根據(jù)實例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 關(guān)于nacos-docker單機(jī)版詳解

    關(guān)于nacos-docker單機(jī)版詳解

    本文詳解Nacos Docker單機(jī)版部署,涵蓋運(yùn)行容器、開放8848端口及訪問測試,分享個人經(jīng)驗,供讀者參考并支持腳本之家
    2025-08-08
  • 淺談docker --privileged=true參數(shù)作用

    淺談docker --privileged=true參數(shù)作用

    這篇文章主要介紹了淺談docker --privileged=true參數(shù)作用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Docker Machine深入學(xué)習(xí)

    Docker Machine深入學(xué)習(xí)

    Docker與Docker Machine 的區(qū)別?又如當(dāng)我們執(zhí)行docker-machine create命令時,Docker Machine都做了些什么?這篇文章都會告訴大家,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Docker安裝MySQL及授權(quán)遠(yuǎn)程訪問的詳細(xì)教程

    Docker安裝MySQL及授權(quán)遠(yuǎn)程訪問的詳細(xì)教程

    Docker是一種流行的容器化平臺,可以簡化應(yīng)用程序的部署和管理,下面這篇文章主要給大家介紹了關(guān)于Docker安裝MySQL及授權(quán)遠(yuǎn)程訪問的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • CentOS7 PostgreSQL安裝、配置、使用詳解

    CentOS7 PostgreSQL安裝、配置、使用詳解

    這篇文章主要介紹了CentOS7 PostgreSQL安裝、配置、使用詳解的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Docker實現(xiàn)雙容器部署的方法步驟

    Docker實現(xiàn)雙容器部署的方法步驟

    本文介紹了Docker和DockerCompose實現(xiàn)雙容器部署,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Docker網(wǎng)絡(luò)沖突排查與解決方案的完整指南

    Docker網(wǎng)絡(luò)沖突排查與解決方案的完整指南

    在微服務(wù)和容器化部署的時代,Docker已經(jīng)成為開發(fā)者和運(yùn)維人員的日常工具,本文將帶你深入了解Docker網(wǎng)絡(luò)沖突的原因、排查方法和解決方案,并提供多個實際案例,希望對大家有所幫助
    2026-04-04
  • Docker 設(shè)置代理的三種方法(2025年06月03日親測可用)

    Docker 設(shè)置代理的三種方法(2025年06月03日親測可用)

    在Docker中設(shè)置代理是非常常見的需求,本文將介紹三種配置Docker使用代理的常見方法,包括通過配置鏡像加速器、通過配置HTTP/HTTPS代理及通過配置代理,感興趣的可以了解一下
    2025-09-09

最新評論

文安县| 黔南| 米林县| 广州市| 保定市| 个旧市| 银川市| 阿克陶县| 长岭县| 浮山县| 石嘴山市| 红安县| 金塔县| 福建省| 兴山县| 阳新县| 宿松县| 乳山市| 交城县| 化隆| 邵阳市| 万全县| 兴安县| 吐鲁番市| 柏乡县| 利津县| 郓城县| 宜章县| 太白县| 定南县| 武隆县| 寿阳县| 吴川市| 西丰县| 运城市| 沂南县| 河津市| 观塘区| 乐安县| 保靖县| 平和县|