日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

使用Docker為UI測(cè)試創(chuàng)建“可恢復(fù)的”MySQL數(shù)據(jù)庫

 印度阿三17 2019-06-23

我們有許多硒測(cè)試,它們運(yùn)行在我們的webapp的類似生產(chǎn)的設(shè)置上.問題是某些測(cè)試會(huì)影響數(shù)據(jù)庫的應(yīng)用程序.

是否可以擁有一個(gè)數(shù)據(jù)量或類似數(shù)據(jù),我們可以在每次測(cè)試之前“克隆”并附加到容器中?

我們真的只需要一個(gè)可以在每次測(cè)試之前快速重新創(chuàng)建的MySQL數(shù)據(jù)庫.偶爾我們會(huì)將模式遷移運(yùn)行到該數(shù)據(jù)庫.

還是有另一種方法更適合這個(gè)嗎?

解決方法:

這是一個(gè)很好的問題,對(duì)于Docker來說可能是一個(gè)非常好的用例.有很多方法可以做到這一點(diǎn),因?yàn)橛修k法備份MySQL數(shù)據(jù)庫.我將在下面解釋其中的一些.

但請(qǐng)注意,您正在進(jìn)行權(quán)衡.這種方法的缺點(diǎn)是你的圖像會(huì)變得非常大,并且需要更長的時(shí)間來拉動(dòng).

此外,您將遇到的一個(gè)問題是,大多數(shù)MySQL容器都使用卷/ var / lib / mysql(存儲(chǔ)數(shù)據(jù)的位置).因此,銷毀容器不足以清除數(shù)據(jù) – 您還需要清除卷.因此,當(dāng)您使用docker rm清除舊容器時(shí),請(qǐng)傳遞-v標(biāo)志以刪除卷.

選項(xiàng)1:將數(shù)據(jù)構(gòu)建到容器中

可以將數(shù)據(jù)構(gòu)建到容器中.這樣做的好處是,您的容器在每次運(yùn)行時(shí)都不會(huì)花費(fèi)任何時(shí)間來設(shè)置數(shù)據(jù).對(duì)于需要很長時(shí)間設(shè)置或拆除的大數(shù)據(jù)集,這種優(yōu)勢(shì)變得更加重要.換句話說,“重置”該數(shù)據(jù)庫幾乎是即時(shí)的.

在基本層面上,我們想要這樣的東西:

ADD mysql_data.tar.gz /var/lib/mysql

這里棘手的部分是創(chuàng)建mysql_data.tar.gz文件(它只是/ var / lib / mysql的tar.gz備份).我們可以這樣做:

>使用空數(shù)據(jù)庫運(yùn)行容器(我將使用mysql:latest here).請(qǐng)注意,我們正在使用命名卷,我們正在轉(zhuǎn)發(fā)端口3306.

$docker run -d –name my-mysql -v my-mysql-data:/ var / lib / mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD = password mysql:latest
>設(shè)置數(shù)據(jù)庫.構(gòu)建架構(gòu)并插入所有測(cè)試數(shù)據(jù).假設(shè)您有一個(gè)數(shù)據(jù)庫備份backup.sql.

$cat backup.sql | mysql -u root -ppassword -h 127.0.0.1
>停止容器.我們不希望MySQL運(yùn)行.數(shù)據(jù)將保留在指定的卷中.

$docker stop my-mysql
>創(chuàng)建/ var / lib / mysql的備份.請(qǐng)注意,我們使用的是相同的命名卷.

$docker run –rm -v my-mysql-data:/ var / lib / mysql -v $(pwd):/ backup mysql:latest tar czvf /backup/mysql_data.tar.gz / var / lib / mysql
>既然你有來自/ var / lib / mysql的gzip壓縮數(shù)據(jù),請(qǐng)?jiān)谀愕腄ockerfile中使用它.請(qǐng)注意,我們需要將其復(fù)制到/因?yàn)槲覀儔嚎s它的方式:

添加mysql_data.tar.gz /

如果您還沒有Dockerfile,請(qǐng)使用第一行創(chuàng)建一個(gè)

從mysql:5.7
>(見工作)將Dockerfile構(gòu)建到包含數(shù)據(jù)的容器映像中.然后運(yùn)行容器.

$docker build -t my-data-image:latest.

$docker run -d -p 3306:3306 my-data-image:latest

Docker將自動(dòng)提取文件作為構(gòu)建的一部分.你完成了. Dockerfile中的容器將始終包含您的干凈數(shù)據(jù).要“重置”容器,只需停止它即可.刪除它用于/ var / lib / mysql的卷.

要編輯數(shù)據(jù),請(qǐng)重復(fù)此過程,但在步驟1中替換現(xiàn)有容器.對(duì)于步驟2,進(jìn)行更改.您將生成一個(gè)新的mysql_data.tar.gz,如果您愿意,可以對(duì)其進(jìn)行版本控制.重建Dockerfile后,如果愿意,可以在新標(biāo)記下發(fā)布它.

選項(xiàng)2:使用docker-entrypoint-initdb.d

MySQL Docker鏡像具有以下功能:當(dāng)容器第一次運(yùn)行時(shí),它將在/docker-entrypoint-initdb.d中運(yùn)行SQL文件.這樣做的好處是它可以使用常規(guī)的MySQL轉(zhuǎn)儲(chǔ)來創(chuàng)建數(shù)據(jù).缺點(diǎn)是數(shù)據(jù)庫啟動(dòng)速度較慢,因?yàn)樗看味紩?huì)恢復(fù)所有數(shù)據(jù).

如果您在./backup.sql中有數(shù)據(jù)的mysqldump,則可以執(zhí)行以下操作:

$docker run -e MYSQL_DATABASE=DB_NAME -e MYSQL_ROOT_PASSWORD=password -d --name my-mysql -v ./backup.sql:/docker-entrypoint-initdb.d/backup.sql -p 3306:3306 mysql:latest

完成后,刪除容器及其卷.

$docker rm -v my-mysql
來源:https://www./content-2-259751.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多