如何恢復(fù)docker容器數(shù)據(jù)
項(xiàng)目測(cè)試環(huán)境數(shù)據(jù)庫(kù)數(shù)據(jù)丟失,特此記錄一下。當(dāng)時(shí)是用 docker 安裝的,以為臨時(shí)使用一段時(shí)間,也沒有持久化。突然前天 docker 日志滿了,同事想著去清理日志,使用了如下命令:
docker system prune
結(jié)果當(dāng)時(shí) MySQL 容器當(dāng)時(shí)正常處于停止?fàn)顟B(tài),結(jié)果容器一下子就被干掉了,我們備份的數(shù)據(jù)還是三月份的,這下糟糕了。然后各種研究開始恢復(fù)。
然后我就去官方文檔去研究這個(gè)命令是干什么的,上面用到的 docker system prune
意思是:
Remove all unused containers, networks, images (both dangling and unreferenced), and optionally, volumes.
刪除所有未使用的容器、網(wǎng)絡(luò)、圖像(懸空和未引用的圖像)以及卷(可選)。
By default, volumes are not removed to prevent important data from being deleted if there is currently no container using the volume. Use the
--volumes
flag when running the command to prune volumes as well:默認(rèn)情況下,如果當(dāng)前沒有使用卷的容器,則不會(huì)刪除卷以防止刪除重要數(shù)據(jù)。運(yùn)行命令時(shí)也可以使用
--volumes
標(biāo)志來(lái)修剪卷:
這下心放下了一半,還好數(shù)據(jù)卷沒有被刪除,我們可以利用數(shù)據(jù)卷可以進(jìn)行恢復(fù)數(shù)據(jù)。接下來(lái)記錄下我的恢復(fù)方案吧。
1.查找數(shù)據(jù)卷位置
數(shù)據(jù)卷目錄在 /var/lib/docker/volumes
下,每個(gè)容器都會(huì)在該目錄下有一個(gè)文件夾,如果容器還存在的話,我們可以使用 docker inspect 容器ID
去查看 數(shù)據(jù)卷位置,這下容器被刪除了,可怎么辦,只能挨個(gè)去找了,一般 MySQL 容器數(shù)據(jù)卷目錄下會(huì)有一個(gè) _data
目錄,該目錄下會(huì)顯示你每個(gè)數(shù)據(jù)庫(kù)的文件夾,最終找到了。
這個(gè) cxhello
就是我們的測(cè)試庫(kù),現(xiàn)在我們就可以恢復(fù)數(shù)據(jù)了。
2.恢復(fù)
使用 docker volume create 數(shù)據(jù)卷名字
命令新建一個(gè)數(shù)據(jù)卷,docker volume ls
查看數(shù)據(jù)卷列表
注意:使用數(shù)據(jù)卷進(jìn)行掛載的時(shí)候,數(shù)據(jù)卷必須是一個(gè)空的目錄,也就是說不能有任何數(shù)據(jù)。
然后創(chuàng)建容器
docker run -d -p 3309:3306 -v mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name huifu mysql:5.7
在恢復(fù)數(shù)據(jù)之前需要把剛剛建立的數(shù)據(jù)卷里面關(guān)聯(lián)的內(nèi)容刪除掉,然后把之前的數(shù)據(jù)卷內(nèi)容復(fù)制到現(xiàn)在的數(shù)據(jù)卷進(jìn)行數(shù)據(jù)恢復(fù)。
cd /var/lib/docker/volumes/mysqldata/_data/ rm -f * rm -f -R *
復(fù)制內(nèi)容到數(shù)據(jù)卷
cd /var/lib/docker/volumes/1db16a9dfdf3442b117ebc2ec11df5df4db717cfd567c77fa0a49905a9652fa0/_data/ cp -R * /var/lib/docker/volumes/mysqldata/_data/
至此數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)完成,進(jìn)入恢復(fù)的容器查看
參考文章
https://docs.docker.com/engine/reference/commandline/system_prune/
https://www.cnblogs.com/cheyunhua/p/13433400.html
到此這篇關(guān)于如何恢復(fù)docker容器數(shù)據(jù) 的文章就介紹到這了,更多相關(guān)docker容器數(shù)據(jù)恢復(fù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker?安裝部署多個(gè)MySQL的實(shí)現(xiàn)步驟
本文主要介紹了docker?安裝部署多個(gè)MySQL的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Docker實(shí)現(xiàn)從零開始搭建SOLO個(gè)人博客的方法步驟
本文主要介紹了Docker實(shí)現(xiàn)從零開始搭建SOLO個(gè)人博客,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11docker安裝Elasticsearch7.6集群并設(shè)置密碼
這篇文章主要介紹了docker安裝Elasticsearch7.6集群并設(shè)置密碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06在CentOS 7 上為docker配置端口轉(zhuǎn)發(fā)以兼容firewall的解決方法
這篇文章主要介紹了在CentOS 7 上為docker配置端口轉(zhuǎn)發(fā)以兼容firewall的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07IDEA使用Docker插件遠(yuǎn)程部署項(xiàng)目到云服務(wù)器的方法步驟
這篇文章主要介紹了IDEA使用Docker插件遠(yuǎn)程部署項(xiàng)目到云服務(wù)器的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12