您好,登錄后才能下訂單哦!
這篇文章主要介紹“Docker怎么掛載mysql”,在日常操作中,相信很多人在Docker怎么掛載mysql問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Docker怎么掛載mysql”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
我們在VMware上的Linux系統上安裝啟動mysql服務后,可以在本機Windows系統上通過Navicat遠程訪問,可以進行數據庫表的增刪改查,但是會存在一個問題
此時如果通過docker關閉MySQL容器,就會導致數據丟失(可以理解為數據庫中的提交事務,未提交事務會導致數據沒保存成功 ),因此修改容器之后需要保存或者掛載mysql數據庫
# 最新版本 docker pull mysql # 如 5.7 版本 本文基于5.7版本 docker pull mysql:5.7
# 運行mysql命名容器名稱為mysql并且設置root賬號初始密碼為root docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD="root" -d mysql:5.7
#進入docker容器,mysql為剛安裝的容器名稱 docker exec -it mysql或者mysql容器ID /bin/bash # 查找Docker內,MySQL配置文件my.cnf的位置 mysql --help | grep my.cnf # 會輸出數據文件的存放路徑 /var/lib/mysql/ show variables like '%datadir%';
拷貝MySQL容器配置文件
mkdir -p /usr/local/mysql/conf && mkdir -p /usr/local/mysql/data # 將容器的配置復制到服務器 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
如果遇到如下錯誤:
/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'.
這個是因為用的overlay2文件系統,而系統默認只能識別overlay文件系統,更新文件系統即可
systemctl stop docker //停掉docker服務 rm -rf /var/lib/docker //注意會清掉docker images的鏡像 vim /etc/sysconfig/docker-storage //將文件里的overlay2改成overlay即可
如:DOCKER_STORAGE_OPTIONS="--storage-driver overlay"
vim /etc/sysconfig/docker //去掉option后面的--selinux-enabled
然后啟動docker即可:systemctl start docker
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數據文件后,刪除或者停止mysql容器后能保留數據庫文件,不至于導致數據庫丟失
首先下載一個mysql:docker pull mysql
運行mysql容器,需要做數據掛載(掛載就是將mysql中的文件,掛載到linux中,下次修改mysql配置文件,就不需要進入mysql,也可以備份mysql的數據):##安裝啟動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=自己設置的密碼 --name mysql01 mysql
-d
后臺啟動
-p
端口映射,將3306映射到外部端口
-v
卷掛載,將mysql內部文件同步到linux的文件中,做到備份
-e
環境配置,這里配置的是mysql密碼
--name
容器名稱
#查看所有volume(卷掛載)的情況 :docker volume ls
#匿名掛載:-v 容器內路徑
docker run -d -P --name mysql01 -v /etc/mysql mysql
(-P 隨機映射端口)
#具名掛載:
docker run -d -P --name mysql02 -v juming-mysql:/etc/mysql mysql
(具名掛載名稱:juming-mysql)
#通過 -v 卷名:容器內路徑
#查看一下這個卷:
docker volume inspect juming-mysql
#所有的docker容器卷,在沒有指定目錄的情況下,都存儲在 /var/lib/docker/volumes/xxx/_data
**如何確定是具名掛載還是匿名掛載,還是指定路徑掛載!** -v 容器內路徑 #匿名掛載 -v 卷名:容器內路徑 #具名掛載 -v /宿主機路徑:容器內路徑 #指定路徑掛載
#通過 -v 容器內路徑:ro rw 改變讀寫權限 ro readonly #只讀 rw readwrite #可讀可寫 #一旦設置了容器權限,容器對我們掛載出來的內容就有限定 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就說明這個路徑只能通過宿主機操作,容器內部是無法操作的!
在測試的時候發現,如果一個文件名,如juming-mysql掛載過一次,刪除容器后,再使用這個名字時,會無法掛載上,原因是docker 里面的volumes緩存沒有清除:
可以使用 docker --help 可以看到命令
再使用:docker system --help
這個就是docker清理volumes緩存的選項,輸入docker system prune
確定時輸入y,即可刪除 掛載緩存
到此,關于“Docker怎么掛載mysql”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。