Docker如何掛載mysql
Docker掛載mysql
我們?cè)赩Mware上的Linux系統(tǒng)上安裝啟動(dòng)mysql服務(wù)后,可以在本機(jī)Windows系統(tǒng)上通過(guò)Navicat遠(yuǎn)程訪問(wèn),可以進(jìn)行數(shù)據(jù)庫(kù)表的增刪改查,但是會(huì)存在一個(gè)問(wèn)題
此時(shí)如果通過(guò)docker關(guān)閉MySQL容器,就會(huì)導(dǎo)致數(shù)據(jù)丟失(可以理解為數(shù)據(jù)庫(kù)中的提交事務(wù),未提交事務(wù)會(huì)導(dǎo)致數(shù)據(jù)沒(méi)保存成功 ),因此修改容器之后需要保存或者掛載mysql數(shù)據(jù)庫(kù)
1.下載鏡像
# 最新版本 docker pull mysql # 如 5.7 版本 本文基于5.7版本 docker pull mysql:5.7
2.啟動(dòng)mysql容器
# 運(yùn)行mysql命名容器名稱(chēng)為mysql并且設(shè)置root賬號(hào)初始密碼為root docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD="root" -d mysql:5.7
3.確定mysql配置文件路徑
#進(jìn)入docker容器,mysql為剛安裝的容器名稱(chēng) docker exec -it mysql或者mysql容器ID /bin/bash # 查找Docker內(nèi),MySQL配置文件my.cnf的位置 mysql --help | grep my.cnf # 會(huì)輸出數(shù)據(jù)文件的存放路徑 /var/lib/mysql/ show variables like '%datadir%';
4.創(chuàng)建本地路徑并掛載Docker內(nèi)數(shù)據(jù)
拷貝MySQL容器配置文件
mkdir -p /usr/local/mysql/conf && mkdir -p /usr/local/mysql/data # 將容器的配置復(fù)制到服務(wù)器 docker cp mysql:/etc/mysql/* /usr/local/mysql/conf/ 或 docker cp mysql:/etc/mysql/. /usr/local/mysql/conf/ # 修改字符集 vim /usr/local/mysql/conf/my.cnf character-set-server=utf8
如果遇到如下錯(cuò)誤:
/usr/bin/docker-current:Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/1b1d4a0234ee4caxxxxx/merged: invalid argument.
See '/usr/bin/docker-current run --help'.
這個(gè)是因?yàn)橛玫膐verlay2文件系統(tǒng),而系統(tǒng)默認(rèn)只能識(shí)別overlay文件系統(tǒng),更新文件系統(tǒng)即可
systemctl stop docker ? ? ?//停掉docker服務(wù) rm -rf /var/lib/docker ? ? ? ?//注意會(huì)清掉docker images的鏡像 vim /etc/sysconfig/docker-storage ? ? ? //將文件里的overlay2改成overlay即可
如:DOCKER_STORAGE_OPTIONS="--storage-driver overlay"
vim /etc/sysconfig/docker ? ? ? ? //去掉option后面的--selinux-enabled
然后啟動(dòng)docker即可:systemctl start docker
5.重新啟動(dòng)mysql容器
docker stop mysql docker rm mysql docker run --name mysql \ -p 3306:3306 \ -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/log:/logs \ -e MYSQL_ROOT_PASSWORD=admin123456 \ --restart=always \ -d mysql:5.7 docker run --name mysql -p 3306:3306 -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/log:/logs -e MYSQL_ROOT_PASSWORD=admin123456 --restart=always -d mysql
映射MySQL數(shù)據(jù)文件后,刪除或者停止mysql容器后能保留數(shù)據(jù)庫(kù)文件,不至于導(dǎo)致數(shù)據(jù)庫(kù)丟失
初識(shí)Docker掛載mysql掛載備份
首先下載一個(gè)mysql:docker pull mysql
運(yùn)行mysql容器,需要做數(shù)據(jù)掛載(掛載就是將mysql中的文件,掛載到linux中,下次修改mysql配置文件,就不需要進(jìn)入mysql,也可以備份mysql的數(shù)據(jù)):##安裝啟動(dòng)mysql,需要配置密碼:
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=自己設(shè)置的密碼 --name mysql01 mysql
-d
后臺(tái)啟動(dòng)-p
端口映射,將3306映射到外部端口-v
卷掛載,將mysql內(nèi)部文件同步到linux的文件中,做到備份-e
環(huán)境配置,這里配置的是mysql密碼--name
容器名稱(chēng)
掛載方式有具名掛載和匿名掛載
#查看所有volume(卷掛載)的情況 :docker volume ls
#匿名掛載:-v 容器內(nèi)路徑
docker run -d -P --name mysql01 -v /etc/mysql mysql
(-P 隨機(jī)映射端口)
#具名掛載:
docker run -d -P --name mysql02 -v juming-mysql:/etc/mysql mysql
(具名掛載名稱(chēng):juming-mysql)
#通過(guò) -v 卷名:容器內(nèi)路徑
#查看一下這個(gè)卷:
docker volume inspect juming-mysql
#所有的docker容器卷,在沒(méi)有指定目錄的情況下,都存儲(chǔ)在 /var/lib/docker/volumes/xxx/_data
**如何確定是具名掛載還是匿名掛載,還是指定路徑掛載!** -v 容器內(nèi)路徑 #匿名掛載 -v 卷名:容器內(nèi)路徑 #具名掛載 -v /宿主機(jī)路徑:容器內(nèi)路徑 #指定路徑掛載
拓展
#通過(guò) -v 容器內(nèi)路徑:ro rw 改變讀寫(xiě)權(quán)限 ro readonly #只讀 rw readwrite #可讀可寫(xiě) #一旦設(shè)置了容器權(quán)限,容器對(duì)我們掛載出來(lái)的內(nèi)容就有限定 docker run -d -P --name mysql02 -v juming-mysql:/etc/mysql:ro mysql docker run -d -P --name mysql02 -v juming-mysql:/etc/mysql:rw mysql #ro,只要看到ro就說(shuō)明這個(gè)路徑只能通過(guò)宿主機(jī)操作,容器內(nèi)部是無(wú)法操作的!
在測(cè)試的時(shí)候發(fā)現(xiàn),如果一個(gè)文件名,如juming-mysql掛載過(guò)一次,刪除容器后,再使用這個(gè)名字時(shí),會(huì)無(wú)法掛載上,原因是docker 里面的volumes緩存沒(méi)有清除:
可以使用 docker --help 可以看到命令
再使用:docker system --help
這個(gè)就是docker清理volumes緩存的選項(xiàng),輸入docker system prune
確定時(shí)輸入y,即可刪除 掛載緩存
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決docker訪問(wèn)外部https數(shù)字證書(shū)問(wèn)題
這篇文章主要介紹了docker訪問(wèn)外部https數(shù)字證書(shū)問(wèn)題,為了解決證書(shū)驗(yàn)證的問(wèn)題,我們需要在構(gòu)建 docker 鏡像的時(shí)候?qū)?nbsp;ca-certificates 根證書(shū)裝上,需要的朋友可以參考下2022-09-09dockerfile指令構(gòu)建docker鏡像的示例代碼
本文主要介紹了dockerfile指令構(gòu)建docker鏡像的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04關(guān)于docker?cgroups資源限制的問(wèn)題
cgroups是一個(gè)非常強(qiáng)大的linux內(nèi)核工具,他不僅可以限制被namespace隔離起來(lái)的資源,還可以為資源設(shè)置權(quán)重、計(jì)算使用量,這篇文章主要介紹了docker?cgroups資源限制,需要的朋友可以參考下2022-09-09docker安裝rockerChat設(shè)置聊天室的詳細(xì)步驟
這篇文章主要介紹了docker安裝rockerChat設(shè)置聊天室的方法,通過(guò)設(shè)置文件獲取docker-compose文件,文中給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-05-05Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像
這篇文章主要介紹了Dockerfile如何使用alpine系統(tǒng)制作haproxy鏡像問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05