Docker掛載資料卷保存MySQL數據
簡介
docker是運行在虛擬環(huán)境中的,這樣會有一個問題,那就是儲存在docker內的數據會隨著docker的重啟、宕機而丟失,從而造成不可估量的損失。
所以docker提供了-v指令,可以將容器內的目錄以及文件映射到外部文件系統(tǒng),容器啟動時會讀取外部文件系統(tǒng),從而保證數據的完整性。
mysql作為最流行的數據庫之一,使用范圍十分廣泛,如果部署在docker卻無法持久化怎么辦呢?今天就來說一下mysql資料卷。
MySql資料卷
mysql需要保存的只有兩種文件:數據和配置文件。mysql的默認配置文件是 /etc/mysql/my.cnf (winDocker下是 /etc/my.cnf),如果是docker下的mysql,建議在 /etc/mysql/conf.d 目錄中創(chuàng)建 .cnf 文件。新建的文件只要保證后綴名是 cnf 即可覆蓋配置項。至于mysql數據存放的目錄,可以在mysql配置文件中找到:
文件寫的很清楚,數據保存在 /var/lib/mysql 路徑。接下來需要創(chuàng)建存放資料卷的路徑,我創(chuàng)建的目錄是 /docker/mysql/data 和 /docker/mysql/conf.d,前者是數據目錄,后者是配置目錄。接下來需要在本機指定位置新建目錄(我已經創(chuàng)建好了):
現在編寫命令:
docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /docker/mysql/data/:/var/lib/mysql/ -v /docker/mysql/conf.d:/etc/mysql/conf.d --name mysql01 mysql
這命令有些長,解釋一下:
- -itd:開啟交互模式,模擬終端,后臺運行
- -p 3306:3306:對應端口映射到宿主機
- -e MYSQL_ROOT_PASSWORD=123456:設置root賬戶密碼為123456
- -v /docker/mysql/data/:/var/lib/mysql/:將宿主機的 /docker/mysql/data/ 目錄與mysql的 /var/lib/mysql/ 同步
- -v /docker/mysql/conf.d:/etc/mysql/conf.d:將宿主機的 /docker/mysql/conf.d 目錄與mysql的 /etc/mysql/conf.d 同步
- --name mysql01:自定義容器名稱
mysql:運行的鏡像名稱
這一命令執(zhí)行過后,你會看到新容器mysql01已經正常啟動了:
正常情況下,你設置的目錄下會多出一些文件:
接下來測試一下。通過客戶端連接到docker下的mysql(如果不知道如何使用客戶端連接docker下的mysql,請翻我之前的博文),新建數據庫:
然后重啟docker:
重啟成功以后,進入容器查看數據庫:
數據庫并沒有因為docker重啟而被初始化,證明資料卷已經生效。以后再也不怕Docker宕機而數據丟失了。
后言
我分別在winDocker和linuxDocker下設置了mysql資料卷,但只有l(wèi)inux可以跑得起來。winDocker的資料卷可以設置成功,但是重啟docker后會出現無法啟動mysql容器的錯誤。根據mysql官方聲明得知,docker內的mysql官方鏡像是oracle公司專門為linux平臺構建的,推測winDocker無法正確掛載資料卷應該和官方支持有點原因,建議同學們直接上手linux。
到此這篇關于Docker掛載資料卷保存MySQL數據的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
jenkins+docker+nginx+nodejs持續(xù)集成部署vue前端項目
本文主要介紹了jenkins+docker+nginx+nodejs持續(xù)集成部署vue前端項目,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05docker 安裝ElasticSearch 6.x的教程詳解
這篇文章主要介紹了docker 安裝ElasticSearch 6.x的教程,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-04-04