最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決Docker之mysql容器數(shù)據(jù)庫(kù)更改不生效的問(wèn)題

 更新時(shí)間:2020年11月20日 14:43:25   作者:大樹168  
這篇文章主要介紹了解決Docker之mysql容器數(shù)據(jù)庫(kù)更改不生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

用官方的mysql 鏡像需要修改一些內(nèi)容,比如配置文件的修改,DB數(shù)據(jù)文件的目錄等,更改之后如果重新運(yùn)行容器,改過(guò)的文件就無(wú)效了,新生成的容器不會(huì)有之前改變的內(nèi)容

第一種是修改官方下載的鏡像,修改之后 提交一個(gè)新的鏡像文件 docker commit -m 等新生成的鏡像信息,

第二種MYSQL的DB數(shù)據(jù),容器關(guān)閉后 如果用 docker restart 重啟同一容器,那么數(shù)據(jù)是正常的,如果重新docker run 容器那么數(shù)據(jù)就不會(huì)顯示,因?yàn)槊總€(gè)容器都有一個(gè)文件地址

這就需要把數(shù)據(jù)文件掛載出來(lái),供其它容器讀取,

在docker中啟動(dòng)mysql容器,在mysql容器中對(duì)數(shù)據(jù)庫(kù)的更改(如創(chuàng)建數(shù)據(jù)庫(kù),更改數(shù)據(jù)等),在commit后再次進(jìn)入容器發(fā)現(xiàn)之前的更改全部沒(méi)有保存

1.后臺(tái)運(yùn)行mysql容器,設(shè)置容器名稱為mysql:

[root@localhost ~]# docker run --name=mysql -p 3306:3306 -d owenchen1992/mysql

f80791a0daf194fdba94f16a9d89ebec8ba8fbd8af28d3ea8b599b9d705f85ba

2.進(jìn)入容器bash和mysql,創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)TEST_DB,并驗(yàn)證TEST_DB創(chuàng)建成功:

[root@localhost ~]# docker exec -it mysql bash root@f80791a0daf1:/# mysql -uroot -p 
show databases; 
create database TEST_DB;

3.退出容器,并commit更改到鏡像: 這個(gè)數(shù)據(jù)其實(shí)是在宿主機(jī)上修改,不是mysql鏡像的東西。所以不生效

mysql> exit
Bye
root@f80791a0daf1:/# exit
exit
[root@localhost ~]# docker commit mysql owenchen1992/mysql

4.重新啟動(dòng)容器并進(jìn)入bash和mysql,發(fā)現(xiàn)之前創(chuàng)建的TEST_DB不見了,說(shuō)明之前的更改無(wú)效:

[root@localhost ~]# docker container stop mysql
mysql
[root@localhost ~]# docker container rm mysql 
mysql
[root@localhost ~]# docker run --name=mysql -p 3306:3306 -d owenchen1992/mysql
a1a1b4174caaadda0ec4b01b9fe5f92d6b3464d85284042274f71aebde0915dd
[root@localhost ~]# docker exec -it mysql bash
root@a1a1b4174caa:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20 MySQL Community Server (GPL)
 
mysql> show databases;
+--------------------+
| Database   |
+--------------------+
| information_schema |
| mysql    |
| performance_schema |
| sys    |
+--------------------+
4 rows in set (0.00 sec)

問(wèn)題原因:

在mysql的Dockerfile中有這樣一行:

VOLUME /var/lib/mysql

這意味在容器中的目錄/var/lib/mysql的所有修改會(huì)對(duì)應(yīng)到宿主機(jī)的某個(gè)位置,可以通過(guò)命令查看具體對(duì)應(yīng)的宿主機(jī)目錄:docker inspect containerID/name. 當(dāng)運(yùn)行docker commit時(shí),容器中的/var/lib/mysql目錄的更改并不會(huì)提交到鏡像中,但這些更改是隨時(shí)與宿主機(jī)對(duì)應(yīng)的目錄同步的。

當(dāng)重新啟動(dòng)commit后的鏡像時(shí),container會(huì)重新在宿主機(jī)中創(chuàng)建一個(gè)目錄來(lái)保存其數(shù)據(jù)更新,因此并不是原先的宿主機(jī)目錄,所以新開啟的容器看不到之前的數(shù)據(jù)更改。

解決方法:

我們已經(jīng)知道了問(wèn)題發(fā)生的原因,就不難解決這個(gè)問(wèn)題了,步驟如下:

可以直接去這個(gè)目錄下查看為每個(gè)容器生成的數(shù)據(jù)目錄

1.找到mysql容器對(duì)應(yīng)的宿主機(jī)目錄"/var/lib/docker/volumes/8496bbf33782bdadc027cdcf23197e5ebc36d11deb69ee833d63b557b3a7183d/_data":

[root@localhost ~]# docker inspect mysql
[
......
    "Source": "/var/lib/docker/volumes/8496bbf33782bdadc027cdcf23197e5ebc36d11deb69ee833d63b557b3a7183d/_data",
    "Destination": "/var/lib/mysql",
......
]

把之前的創(chuàng)建容器運(yùn)行的步驟再執(zhí)行一步,運(yùn)行新的容器,然后建一張TEST表,先關(guān)閉容器后刪除容器服務(wù)

4.后臺(tái)運(yùn)行容器新的容器,并將宿主機(jī)對(duì)應(yīng)的目錄掛載到容器的/var/lib/mysql目錄下并開啟讀寫權(quán)限(關(guān)鍵步驟):

[root@localhost ~]# docker run --name=mysql -p 3306:3306 -v /var/lib/docker/volumes/8496bbf33782bdadc027cdcf23197e5ebc36d11deb69ee833d63b557b3a7183d/_data:/var/lib/mysql:rw -d owenchen1992/mysql

5.此時(shí)進(jìn)入新開啟的容器,并查看數(shù)據(jù)庫(kù):發(fā)現(xiàn)剛才創(chuàng)建的數(shù)據(jù)庫(kù)TEST_DB沒(méi)有因?yàn)橹匦逻\(yùn)行容器而消失,問(wèn)題解決

步驟是,1 新建一張表,2 關(guān)掉建表的容器,3重新運(yùn)行容器,并且掛載數(shù)據(jù)目錄到/var/lib/mysql下,問(wèn)題就解決了!

補(bǔ)充知識(shí):docker環(huán)境下使用mysql出現(xiàn)編碼格式問(wèn)題修改編碼格式的方法

方法一(適用于單機(jī)器修改)

首先確定mysql服務(wù)處于開始狀態(tài)

鍵入docker exec -it +服務(wù)名 /bin/bash 進(jìn)入控制臺(tái)

鍵入apt-get update 命令

鍵入apt-get install vim (上述兩條命令用于下載vim編輯器),

輸入vim /etc/mysql/mysql.conf.d/mysqld.cnf 命令 進(jìn)入mysqld.cnf文件

4.使用i打開編輯模式,在文本的最后輸入以下內(nèi)容:

注意:下面的內(nèi)容一定不能輸錯(cuò),否則會(huì)造成配置文件失效

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8

ESC退出,shift+冒號(hào)wq保存 退出。

5.進(jìn)入mysql控制臺(tái)

6.輸入show variables like ‘char%'; 即可查看到修改后的相應(yīng)信息

修改完畢重啟數(shù)據(jù)庫(kù)后:輸入show variables like"char%"即可

出現(xiàn)上述結(jié)果說(shuō)明已經(jīng)修改成功

方法二(適用于集群搭建)

將配置文件拷貝出原目錄,使用外部文件修改,此方法用于發(fā)送文件到多臺(tái)服務(wù)器進(jìn)行數(shù)據(jù)庫(kù)默認(rèn)編碼修改

docker exec -it +服務(wù)名 /bin/bash 進(jìn)入控制臺(tái)

輸入cd /etc/mysql/conf.d/ 進(jìn)入配置文件目錄

輸入pwd獲取文件絕對(duì)路徑

輸入cd回退到控制臺(tái),exit退出

輸入docker cp 服務(wù)名:/etc/mysql/conf.d/mysql.cnf /usr/soft ( 將docker中的mysql.cnf文件拷貝到linux下的soft文件夾中)

開啟外部編輯器(如notepad++)進(jìn)行配置文件書寫 如下:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect=‘SET collation_connection = utf8_unicode_ci'
init_connect=‘SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

PS:注意配置文件的內(nèi)容要有間隔,這一點(diǎn)很重要

保存好

7.docker cp /usr/soft/mysql.cnf 服務(wù)名:/etc/mysql/conf.d/ 將修改后的文件拷貝到原來(lái)的目錄下覆蓋

8.重啟docker中的mysql服務(wù),然后

9.輸入 show variables like ‘char%';命令即可查看已經(jīng)修改好的字符編碼格式

以上這篇解決Docker之mysql容器數(shù)據(jù)庫(kù)更改不生效的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談docker容器鏡像的保存位置

    淺談docker容器鏡像的保存位置

    在使用Docker時(shí),我們常常需要從遠(yuǎn)程倉(cāng)庫(kù)中拉取鏡像,并將其保存到本地儲(chǔ)存位置,本文主要介紹了淺談docker容器鏡像的保存位置,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • docker部署微信小程序自動(dòng)構(gòu)建發(fā)布和更新的詳細(xì)步驟

    docker部署微信小程序自動(dòng)構(gòu)建發(fā)布和更新的詳細(xì)步驟

    通過(guò) Jenkins 和 Docker 部署微信小程序,并實(shí)現(xiàn)自動(dòng)構(gòu)建、發(fā)布和版本更新,主要涉及到幾個(gè)步驟,下面給大家分享docker部署微信小程序自動(dòng)構(gòu)建發(fā)布和更新的詳細(xì)步驟,感興趣的朋友一起看看吧
    2024-12-12
  • docker容器因報(bào)錯(cuò)無(wú)法啟動(dòng)問(wèn)題的檢查及修復(fù)容器錯(cuò)誤并重啟

    docker容器因報(bào)錯(cuò)無(wú)法啟動(dòng)問(wèn)題的檢查及修復(fù)容器錯(cuò)誤并重啟

    隨著容器技術(shù)的發(fā)展,現(xiàn)在很多的應(yīng)用程序系統(tǒng)都會(huì)選擇使用docker容器進(jìn)行部署,下面這篇文章主要給大家介紹了關(guān)于docker容器因報(bào)錯(cuò)無(wú)法啟動(dòng)問(wèn)題的檢查及修復(fù)容器錯(cuò)誤并重啟的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • Docker鏡像分層的原理詳解

    Docker鏡像分層的原理詳解

    這篇文章主要介紹了Docker鏡像分層的原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Docker部署web項(xiàng)目的實(shí)現(xiàn)

    Docker部署web項(xiàng)目的實(shí)現(xiàn)

    這篇文章主要介紹了Docker部署web項(xiàng)目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 在Docker容器中部署靜態(tài)網(wǎng)頁(yè)的方法教程

    在Docker容器中部署靜態(tài)網(wǎng)頁(yè)的方法教程

    這篇文章主要給大家介紹了在Docker容器中部署靜態(tài)網(wǎng)頁(yè)的方法教程,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • dockerfile結(jié)合go應(yīng)用程序的簡(jiǎn)單應(yīng)用代碼示例

    dockerfile結(jié)合go應(yīng)用程序的簡(jiǎn)單應(yīng)用代碼示例

    Dockerfile文件是一個(gè)包含了指令和參數(shù)的文本文件,用于自動(dòng)化構(gòu)建Docker鏡像,這篇文章主要給大家介紹了關(guān)于dockerfile結(jié)合go應(yīng)用程序的簡(jiǎn)單應(yīng)用,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Docker images導(dǎo)出和導(dǎo)入操作

    Docker images導(dǎo)出和導(dǎo)入操作

    這篇文章主要介紹了Docker images導(dǎo)出和導(dǎo)入操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • docker?搭建?ElasticSearch過(guò)程解析

    docker?搭建?ElasticSearch過(guò)程解析

    這篇文章主要介紹了docker搭建ElasticSearch的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,,需要的朋友可以參考下
    2023-08-08
  • 將strapi打包成docker鏡像的步驟詳解

    將strapi打包成docker鏡像的步驟詳解

    在這個(gè)指南中,我們將學(xué)習(xí)如何將 Strapi 應(yīng)用程序打包成 Docker 鏡像,解決多環(huán)境部署問(wèn)題,文末也會(huì)提供打包好的鏡像地址,讓同學(xué)們能夠直接使用,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

拜泉县| 天气| 山阴县| 余庆县| 东乌珠穆沁旗| 淮阳县| 镇坪县| 东宁县| 南阳市| 吉首市| 红原县| 大渡口区| 张家川| 内乡县| 吉安市| 东莞市| 南雄市| 琼海市| 德兴市| 安福县| 长海县| 连南| 澄江县| 阳春市| 于都县| 镇江市| 广灵县| 新竹市| 绥宁县| 赤峰市| 察雅县| 安阳县| 石楼县| 龙门县| 阳泉市| 衡阳市| 通辽市| 三亚市| 文安县| 邵东县| 曲周县|