溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker怎么掛載mysql

發(fā)布時(shí)間:2023-03-07 16:23:51 來源:億速云 閱讀:183 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Docker怎么掛載mysql”,在日常操作中,相信很多人在Docker怎么掛載mysql問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Docker怎么掛載mysql”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

    Docker掛載mysql

    我們?cè)赩Mware上的Linux系統(tǒng)上安裝啟動(dòng)mysql服務(wù)后,可以在本機(jī)Windows系統(tǒng)上通過Navicat遠(yuǎn)程訪問,可以進(jìn)行數(shù)據(jù)庫表的增刪改查,但是會(huì)存在一個(gè)問題

    此時(shí)如果通過docker關(guān)閉MySQL容器,就會(huì)導(dǎo)致數(shù)據(jù)丟失(可以理解為數(shù)據(jù)庫中的提交事務(wù),未提交事務(wù)會(huì)導(dǎo)致數(shù)據(jù)沒保存成功 ),因此修改容器之后需要保存或者掛載mysql數(shù)據(jù)庫

    1.下載鏡像

    # 最新版本
    docker pull mysql
     
    # 如 5.7 版本 本文基于5.7版本
    docker pull mysql:5.7

    2.啟動(dòng)mysql容器

    # 運(yùn)行mysql命名容器名稱為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為剛安裝的容器名稱
    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%';

    Docker怎么掛載mysql

    Docker怎么掛載mysql

    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ù)庫文件,不至于導(dǎo)致數(shù)據(jù)庫丟失

    初識(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 容器名稱

    掛載方式有具名掛載和匿名掛載

    #查看所有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

    (具名掛載名稱:juming-mysql)

    #通過 -v 卷名:容器內(nèi)路徑

    #查看一下這個(gè)卷:

    docker volume inspect juming-mysql

    Docker怎么掛載mysql

    #所有的docker容器卷,在沒有指定目錄的情況下,都存儲(chǔ)在 /var/lib/docker/volumes/xxx/_data

    **如何確定是具名掛載還是匿名掛載,還是指定路徑掛載!**
    				
    	-v 容器內(nèi)路徑		#匿名掛載
    	-v 卷名:容器內(nèi)路徑		#具名掛載
    	-v /宿主機(jī)路徑:容器內(nèi)路徑		#指定路徑掛載

    拓展

    #通過 -v 容器內(nèi)路徑:ro	rw	改變讀寫權(quán)限
    ro	readonly	#只讀
    rw	readwrite	#可讀可寫
    
    #一旦設(shè)置了容器權(quán)限,容器對(duì)我們掛載出來的內(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就說明這個(gè)路徑只能通過宿主機(jī)操作,容器內(nèi)部是無法操作的!

    在測(cè)試的時(shí)候發(fā)現(xiàn),如果一個(gè)文件名,如juming-mysql掛載過一次,刪除容器后,再使用這個(gè)名字時(shí),會(huì)無法掛載上,原因是docker 里面的volumes緩存沒有清除:

    可以使用 docker --help 可以看到命令

    Docker怎么掛載mysql

    再使用:docker system --help

    Docker怎么掛載mysql

    這個(gè)就是docker清理volumes緩存的選項(xiàng),輸入docker system prune 確定時(shí)輸入y,即可刪除 掛載緩存

    Docker怎么掛載mysql

    到此,關(guān)于“Docker怎么掛載mysql”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI