使用 docker-compose 啟動(dòng) MySQL 的問(wèn)題記錄

問(wèn)題

在工作中使用 docker-compose 來(lái)啟動(dòng) MySQL 容器時(shí)应役,由于沒(méi)有配置字符集捺疼,出現(xiàn)以下問(wèn)題:

  • 數(shù)據(jù)庫(kù)里的中文記錄在網(wǎng)頁(yè)上無(wú)法正常顯示,全部是亂碼屏鳍。
  • 修改配置文件后溉仑,在容器中打開(kāi) MySQL 終端后挖函,修改記錄時(shí)無(wú)法輸入中文。

這是原來(lái)的 docker-compose.yaml 文件:

version: "2"

services:
  mysql:
    container_name: mysql-name
    image: mysql
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "127.0.0.1:3308:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=000000
    restart: always

解決過(guò)程

以交互模式進(jìn)入容器:

docker exec -it containerName sh

進(jìn)入 MySQL 終端:

mysql -u userName -p

選擇數(shù)據(jù)庫(kù)后浊竟,執(zhí)行下面的命令查看字符集情況挪圾, 發(fā)現(xiàn)基本都是 latin1:

SHOW VARIABLES LIKE 'character_set_%';

SHOW VARIABLES LIKE 'collation_%';

參考網(wǎng)上的教程修改:

# 解決外部訪問(wèn)數(shù)據(jù)亂碼問(wèn)題
SET NAMES 'utf8';

# 上面這條命令相當(dāng)于下面的三條命令
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

# 如果已經(jīng)建立了數(shù)據(jù)庫(kù),可以通過(guò)以下語(yǔ)句修改字符集
alter database name character set utf8; # 修改數(shù)據(jù)庫(kù)
alter table type character set utf8; # 修改表
alter table type modify type_name varchar(50) CHARACTER SET utf8; # 修改字段

# 修改配置文件逐沙,進(jìn)入容器后找到:etc/mysql/mysql.conf.d/mysqld.cnf
[mysql]
default-character-set = utf8

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

執(zhí)行以上命令后哲思,再查看字符集,發(fā)現(xiàn)大部分都修改為 utf-8 了吩案,在網(wǎng)頁(yè)端的中文也能正常顯示了棚赔。

如果想要在 MySQL 終端中能夠輸入中文,還需要按下面的方式進(jìn)入終端:

LANG=C.UTF-8 mysql -u username -p

新的問(wèn)題

在停止容器后再啟動(dòng)時(shí)徘郭,出現(xiàn)容器一直處于 restarting 狀態(tài)的情況靠益,執(zhí)行這條命令來(lái)查看指定容器日志:

docker logs --tail 50 --follow --timestamps containerName

發(fā)現(xiàn)錯(cuò)誤:unknown variable 'default-character-set=utf8'

這時(shí)因?yàn)闊o(wú)法進(jìn)入容器來(lái)修改 MySQL 的配置文件,只能先刪除容器残揉。

修改配置文件:新添加的內(nèi)容中胧后,刪除 [mysqld] 標(biāo)簽下的 default-character-set=utf8 ,保留 character_set_server=utf8 抱环,刪除其它標(biāo)簽及內(nèi)容壳快。

[mysqld]
character_set_server = utf8 

通過(guò)掛載 volume 的方式來(lái)使用自定義的配置文件,修改好后的 docker-compose.yaml 文件:

version: "2"

services:
  mysql:
    container_name: mysql-name
    image: mysql
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/mysql.conf.d
    ports:
      - "127.0.0.1:3308:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=000000
      - LANG=C.UTF-8
    restart: always

一個(gè) docker-compose.yaml 中可能有多個(gè)服務(wù)镇草,可以通過(guò)這條命令來(lái)啟動(dòng)指定服務(wù):

docker-compose up -d mysql

這時(shí)再查看字符集眶痰,除了 character_set_filesystem 外已全部是 utf-8,進(jìn)入終端時(shí)不指定 LANG 也能輸入中文梯啤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竖伯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌七婴,老刑警劉巖祟偷,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異打厘,居然都是意外死亡修肠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門婚惫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人魂爪,你說(shuō)我怎么就攤上這事先舷。” “怎么了滓侍?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蒋川,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我撩笆,道長(zhǎng)捺球,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任夕冲,我火速辦了婚禮氮兵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歹鱼。我一直安慰自己泣栈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布弥姻。 她就那樣靜靜地躺著南片,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庭敦。 梳的紋絲不亂的頭發(fā)上疼进,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音秧廉,去河邊找鬼伞广。 笑死,一個(gè)胖子當(dāng)著我的面吹牛疼电,可吹牛的內(nèi)容都是我干的赔癌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼澜沟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灾票!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起茫虽,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刊苍,失蹤者是張志新(化名)和其女友劉穎既们,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體正什,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啥纸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婴氮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斯棒。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖主经,靈堂內(nèi)的尸體忽然破棺而出荣暮,到底是詐尸還是另有隱情,我是刑警寧澤罩驻,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布穗酥,位于F島的核電站,受9級(jí)特大地震影響惠遏,放射性物質(zhì)發(fā)生泄漏砾跃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一节吮、第九天 我趴在偏房一處隱蔽的房頂上張望抽高。 院中可真熱鬧,春花似錦透绩、人聲如沸厨内。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雏胃。三九已至,卻和暖如春志鞍,著一層夾襖步出監(jiān)牢的瞬間瞭亮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工固棚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留统翩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓此洲,卻偏偏與公主長(zhǎng)得像厂汗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呜师,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前段時(shí)間公司內(nèi)部博客上凱哥分享了一篇關(guān)于mysql字符集編碼的文章,之前我對(duì)mysql字符集一塊基本沒(méi)有深究過(guò),看...
    __七把刀__閱讀 6,440評(píng)論 14 18
  • 一 娶桦、什么是 Docker Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國(guó)...
    Blazzer閱讀 3,136評(píng)論 0 13
  • 參考書目:《愛(ài)情數(shù)學(xué)》[英] 漢娜·弗萊 不把男神當(dāng)男神衷畦,對(duì)方才會(huì)平視你栗涂。憧憬是離愛(ài)情最遙遠(yuǎn)的距離。因?yàn)檠鲆暺碚瑹o(wú)法...
    甘小萊閱讀 743評(píng)論 0 0
  • 天生對(duì)大海有著深厚的感情斤程,看見(jiàn)大海就莫名的興奮。難道是因?yàn)榕苏媸撬龅钠谢欤苍S是因?yàn)槲覂?nèi)心向往寬廣大度的境界忿墅。 還...
    夏天Molly閱讀 475評(píng)論 5 4