好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 解決Docker之mysql容器數(shù)據(jù)庫更改不生效的問題

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

熱門標(biāo)簽:新鄉(xiāng)牧野400電話申請 高德地圖標(biāo)注足跡怎么打標(biāo) 電銷智能機器人試用 企業(yè)辦理400電話收費標(biāo)準 智能電銷機器人真的有用么 激光標(biāo)記地圖標(biāo)注 百度地圖底圖標(biāo)注 撫州市城區(qū)地圖標(biāo)注 中國地圖標(biāo)注上各個省

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

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

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

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

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

1.后臺運行mysql容器,設(shè)置容器名稱為mysql:

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

f80791a0daf194fdba94f16a9d89ebec8ba8fbd8af28d3ea8b599b9d705f85ba

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

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

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

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

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

[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)

問題原因:

在mysql的Dockerfile中有這樣一行:

VOLUME /var/lib/mysql

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

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

解決方法:

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

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

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

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

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

4.后臺運行容器新的容器,并將宿主機對應(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ù)庫:發(fā)現(xiàn)剛才創(chuàng)建的數(shù)據(jù)庫TEST_DB沒有因為重新運行容器而消失,問題解決

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

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

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

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

鍵入docker exec -it +服務(wù)名 /bin/bash 進入控制臺

鍵入apt-get update 命令

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

輸入vim /etc/mysql/mysql.conf.d/mysqld.cnf 命令 進入mysqld.cnf文件

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

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

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

ESC退出,shift+冒號wq保存 退出。

5.進入mysql控制臺

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

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

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

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

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

docker exec -it +服務(wù)名 /bin/bash 進入控制臺

輸入cd /etc/mysql/conf.d/ 進入配置文件目錄

輸入pwd獲取文件絕對路徑

輸入cd回退到控制臺,exit退出

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

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

[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)容要有間隔,這一點很重要

保存好

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

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

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

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

標(biāo)簽:西安 辛集 延安 忻州 臨汾 邯鄲 海西 南通

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解決Docker之mysql容器數(shù)據(jù)庫更改不生效的問題》,本文關(guān)鍵詞  解決,Docker,之,mysql,容器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解決Docker之mysql容器數(shù)據(jù)庫更改不生效的問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于解決Docker之mysql容器數(shù)據(jù)庫更改不生效的問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: JAPAN丰满人妻VIDEOSHD成熟Y| 一次就好韩国电影| 人人艹在线视频| 老司机精品视频免费| 涩爱tv| 日日干夜夜艹| 精品无码亚洲一区二区三区毛片| 正正经经谈恋爱| 超级Y荡的高中女学生| 女朋友下边粉嫩粉嫩的怎么办| 美女全身裸照| 城中村精品无码视频在线观看| 女贝网sp打屁股免费视频| 色狠狠色综合久久久绯色AⅤ影视| 淫视频网站| 免费岛国片在线观看x片喷水| 91精品国产91久久久久久久无码 | 三上悠亚家庭教师| 久久免| 女仆跪着用乳伺候主人玩弄h调教| 17??小泬破白浆啪啪欧美一区| 嗯嗯啊啊啊不要了| 假山后面的呻吟喘息h| 久久人妻人人人澡人人爽精品 | 欧美精品a?V人妻无码免费| 免费日韩三级电影| 国产入口秘?91福利姬| wwwxx欧美| 国产裸体极品女学生在线观看| 九九电影网456重曰味| 人蛇大战色蛇女三级| 一区二区国产在线观看| 99re免费视频精品全部| 私库在线观看| 国产成人午夜无码AⅤ片优酷| 男女粗暴进去120秒动态图| 一级国产a级a毛片无卡| 农村激情亂伦短篇村野小神农| 色情乱婬一区二区三区在线观看| 久久久噜久噜久久gif动图| 白丝校花被啪到娇喘不停小说|