日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Named Volume 在 MySQL 数据持久化上的基本应用

發(fā)布時(shí)間:2023/12/4 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Named Volume 在 MySQL 数据持久化上的基本应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文作者:春哥

非常感謝春哥的投稿,同時(shí)也有一些感慨。

初識(shí)春哥時(shí),春哥是美術(shù)設(shè)計(jì)大咖。后不久,創(chuàng)業(yè)并致力于游戲開(kāi)發(fā),已有3年。從Unity3D到IOS(Swift)開(kāi)發(fā),從前端開(kāi)發(fā)到后端以及容器技術(shù),從設(shè)計(jì)開(kāi)發(fā)測(cè)試到產(chǎn)品經(jīng)理以及CEO,已是爬坑累累,但是仍是奮勇前行。

春哥仍在奮斗,游戲也即將上線(xiàn),而我們也需砥礪前行啊!



使用 Docker 時(shí),容器(Container)會(huì)自動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)卷(Data Volume)來(lái)單獨(dú)儲(chǔ)存數(shù)據(jù)。數(shù)據(jù)卷有獨(dú)立的本地目錄,不跟著容器走,你在不同地方使用同一個(gè)容器,數(shù)據(jù)是不一樣的。自動(dòng)創(chuàng)建的數(shù)據(jù)卷不便于管理,Docker 官方建議我們用 Named Volume 來(lái)負(fù)責(zé)容器的數(shù)據(jù)持久化,Named Volume 就是自己取名字手動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)卷。

本文使用 MySQL 數(shù)據(jù)庫(kù)做例子。數(shù)據(jù)卷對(duì)數(shù)據(jù)庫(kù)容器來(lái)說(shuō)是非常重要的。


創(chuàng)建數(shù)據(jù)卷


這里我們隨便取個(gè)數(shù)據(jù)卷名字叫?my-data?吧。創(chuàng)建命令很簡(jiǎn)單:

docker volume create --name my-data


創(chuàng)建共享網(wǎng)絡(luò)


容器在創(chuàng)建時(shí),除了自動(dòng)創(chuàng)建數(shù)據(jù)卷外,也會(huì)自動(dòng)創(chuàng)建它的專(zhuān)用網(wǎng)絡(luò)(Network)。這個(gè)網(wǎng)絡(luò)我們也要用自己創(chuàng)建的(Defined Network),自己創(chuàng)建的方便管理。這里給網(wǎng)絡(luò)取名叫?my-network

docker network create my-network

為什么創(chuàng)建這個(gè)網(wǎng)絡(luò)呢?是為了在容器間共享網(wǎng)絡(luò),看下去就會(huì)明白。


創(chuàng)建 MySQL 容器


現(xiàn)在利用前面創(chuàng)建的數(shù)據(jù)卷和網(wǎng)絡(luò)創(chuàng)建一個(gè) MySQL 容器:

docker run -d --rm --name mysql-a -v my-data:/var/lib/mysql --network my-network -p 33061:3306 -e MYSQL_ROOT_PASSWORD=abcd1234 mysql:latest

詳細(xì)解釋一下各參數(shù):

  • 容器命名為?mysql-a

  • MySQL 默認(rèn)的端口是?3306,你可以換一個(gè)以免和本地的沖突。這個(gè)例子中我映射到?33061

  • -d?是后臺(tái)運(yùn)行。?--rm?是讓容器在停止運(yùn)行時(shí)自動(dòng)刪除。數(shù)據(jù)在外部的卷里,可以放心刪。

  • -v?就是使用數(shù)據(jù)卷。/var/lib/mysql?是 MySQL 存放數(shù)據(jù)的目錄,現(xiàn)在我們要把里面的東西都映射到數(shù)據(jù)卷里:-v my-data:/var/lib/mysql

  • --network my-network?使用我們剛才創(chuàng)建的網(wǎng)絡(luò)。

  • -e?設(shè)定 MySQL 的環(huán)境變量。在這里我們?cè)O(shè)定 root 密碼為?abcd1234

  • 最后?mysql:latest?是映像(Image)。具體 tag 可看 Docker Hub:?MySQL


創(chuàng)建 PhpMyAdmin 容器


管理 MySQL 數(shù)據(jù)庫(kù)的客戶(hù)端有很多,其中 PhpMyAdmin 是比較常見(jiàn)的一種。所以現(xiàn)在我們要?jiǎng)?chuàng)建 PhpMyAdmin 的容器,然后去管理 MySQL 容器,也就是連接兩種容器。

如何連接?以前可以用?--link?的方式,但官方已經(jīng)不推薦了,未來(lái)版本會(huì)棄用的,這里就不寫(xiě)了。官方推薦的是 Defined Network,之前創(chuàng)建?my-network?就是為了用在這里。如果你不用 PhpMyAdmin 管理,那么 Network 也可以不單獨(dú)創(chuàng)建。

創(chuàng)建容器:

docker run -d --rm --name my-pma --network my-network -p 8080:80 -e PMA_HOST=mysql-a phpmyadmin/phpmyadmin

參數(shù)中?PMA_HOST=mysql-a?指定了 MySQL 容器。端口隨便映射了一個(gè)?8080。創(chuàng)建好后,PhpMyAdmin 容器和 MySQL 容器就在同一個(gè)網(wǎng)絡(luò)里了,然后 PhpMyAdmin 就可以管理 MySQL 數(shù)據(jù)庫(kù)了。

現(xiàn)在打開(kāi)瀏覽器,進(jìn)?http://localhost:8080,輸入 root 賬戶(hù)密碼就可以進(jìn)去管理了——如果你的 MySQL 版本 >= 5.7,那可能登錄不進(jìn)去,需要改一下 MySQL 賬號(hào)所用的密碼插件(identified with mysql_native_password)。


數(shù)據(jù)卷的備份


使用數(shù)據(jù)卷的一大好處,是可以在不同機(jī)器和環(huán)境中使用同一套數(shù)據(jù)。因此,必須掌握如何備份和還原數(shù)據(jù)卷。

備份的操作思路:

  • 創(chuàng)建一個(gè)新容器,這個(gè)容器有一個(gè)數(shù)據(jù)卷和 MySQL 容器是一樣的。

  • 再掛載一個(gè)非 Named Volume 數(shù)據(jù)卷(本地目錄),用來(lái)映射本地備份目錄。

  • 將 MySQL 容器數(shù)據(jù)卷打包,然后存在備份目錄里。

  • 在本地目錄獲取數(shù)據(jù)卷打包文件。

  • 命令行操作:

    docker run --rm --volumes-from mysql-a -v $(pwd):/backup busybox tar cvf /backup/mysql-backup.tar /var/lib/mysql

    參數(shù)說(shuō)明:

    • 用了?--volumes-from mysql-a,就是從?mysql-a?直接拿它的數(shù)據(jù)卷(my-data)過(guò)來(lái)用。

    • -v $(pwd):/backup:將本地當(dāng)前目錄作為數(shù)據(jù)卷目錄映射到容器系統(tǒng)的?/backup?目錄,$(pwd)就是輸出當(dāng)前目錄,注意在 PowerShell 里是?${pwd}。你用別的目錄也可以。

    • busybox?是用到的 Image,它的容量很小,但重要工具基本都有。

    • tar cvf /backup/mysql-backup.tar /var/lib/mysql?是在容器里執(zhí)行的備份命令:將?/var/lib/mysql?(mysql-a?數(shù)據(jù)卷內(nèi)容)打包到?/backup?目錄下的 mysql-backup.tar 中。由于本地當(dāng)前目錄和?/backup?有映射關(guān)系,所以本地當(dāng)前目錄下也會(huì)有 mysql-backup.tar 文件。

    mysql-backup.tar 就是我們創(chuàng)建的數(shù)據(jù)卷備份文件,你可以帶著它到處跑了。有些人會(huì)做一個(gè)專(zhuān)門(mén)存放各種數(shù)據(jù)卷的容器作為備份,我感覺(jué)有點(diǎn)麻煩和多余。


    數(shù)據(jù)卷的還原


    還原的思路和備份一樣,也是先要搞一個(gè)臨時(shí)容器,然后執(zhí)行一些命令去解壓 tar 文件。

    假設(shè)我們?cè)趧e的地方創(chuàng)建了一個(gè)新的 MySQL 容器?mysql-b,我們?cè)撛趺窗?my-data?數(shù)據(jù)卷的數(shù)據(jù)還原到它里面去呢?

    先把 mysql-backup.tar 拷貝到當(dāng)前目錄。然后:

    docker run --rm --volumes-from mysql-b -v $(pwd):/backup centos bash -c "cd /var/lib && rm -rf mysql/* && tar xvf /backup/mysql-backup.tar --strip 2"

    這里重點(diǎn)解釋一下在容器 bash 里執(zhí)行的命令:

  • cd /var/lib: 進(jìn)入?/var/lib?目錄。

  • rm -rf mysql/*: 刪除目錄 mysql 下的所有文件,為的是等會(huì)將數(shù)據(jù)卷的備份文件放進(jìn)去。刪除再解壓進(jìn)去比直接覆蓋更干凈穩(wěn)妥一些。

  • tar xvf /backup/mysql-backup.tar --strip 2: 將 mysql-backup.tar 文件中 mysql 的文件解壓到?/var/lib/mysql?目錄中去,因?yàn)槲覀冊(cè)?/var/lib?中,而打包文件包括了?/var/lib/mysql?多層目錄,所以加了參數(shù)?--strip 2。關(guān)于打包解壓目錄這種事你可以自己規(guī)劃,只要確保?mysql?里的文件能正確的備份和還原就行。

  • 文件解壓完后,重啟當(dāng)前的 MySQL 容器:

    docker restart mysql-b

    還原工作到此結(jié)束,現(xiàn)在?mysql-b?的數(shù)據(jù)和?mysql-a?是一樣的了。


    總結(jié)


    數(shù)據(jù)卷對(duì)數(shù)據(jù)庫(kù)容器非常重要。Named Volume 可以使我們管理數(shù)據(jù)卷更為方便,應(yīng)多加利用。其他數(shù)據(jù)庫(kù)的文件結(jié)構(gòu)和 MySQL 可能不一樣,但只要掌握了 MySQL 數(shù)據(jù)卷備份還原的原理之后,其他數(shù)據(jù)庫(kù)應(yīng)該也不難操作。



    轉(zhuǎn)載是一種動(dòng)力 分享是一種美德

    如果喜歡作者的文章,請(qǐng)關(guān)注“magiccodes”訂閱號(hào)以便第一時(shí)間獲得最新內(nèi)容。本文版權(quán)歸作者和湖南心萊信息科技有限公司共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。


    QQ群:

    編程交流群<85318032>?

    產(chǎn)品交流群<897857351>


    長(zhǎng)沙線(xiàn)下技術(shù)社區(qū)已經(jīng)創(chuàng)建,有興趣者可以通過(guò)客服加群。接下來(lái),我們會(huì)定期組織一些線(xiàn)下技術(shù)交流分享會(huì),以饗大家。


    總結(jié)

    以上是生活随笔為你收集整理的Named Volume 在 MySQL 数据持久化上的基本应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。