1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一次生產(chǎn)環(huán)境的docker MySQL故障

        共 1289字,需瀏覽 3分鐘

         ·

        2022-05-30 23:44

        問(wèn)題

        昨天下午本來(lái)要去吃下午茶,然后前端小伙伴突然說(shuō)接口怎么崩了,我登上sentry一看,報(bào)錯(cuò)了

        (2005,?"Unknown?MySQL?server?host?'mysql'?(-3)")

        啥意思啊,連不上數(shù)據(jù)庫(kù),host是mysql因?yàn)檫@是在docker環(huán)境里

        直接ssh連上服務(wù)器查看,沒(méi)啥問(wèn)題呀,MySQL容器也正常運(yùn)行著

        奇怪

        然后我重啟了一波docker,結(jié)果發(fā)現(xiàn)MySQL容器沒(méi)有正常重啟?

        手動(dòng)docker stop一下,再重新docker compose up

        結(jié)果寄了,服務(wù)恢復(fù)起來(lái)后MySQL數(shù)據(jù)全沒(méi)了……

        找原因

        慌還是有點(diǎn)慌的,畢竟是生產(chǎn)數(shù)據(jù),但我心里也明白數(shù)據(jù)不可能憑空消失,MySQL作為成熟的商用數(shù)據(jù)庫(kù),不可能犯這種低級(jí)錯(cuò)誤,那問(wèn)題八成就出在我們自己身上了…

        果然,之前使用docker-compose編排容器的時(shí)候偷懶,沒(méi)有給MySQL容器加上volume映射

        現(xiàn)在強(qiáng)制stop的時(shí)候沒(méi)有先commit,所以就導(dǎo)致容器數(shù)據(jù)“丟失”

        我這里用了雙引號(hào),因?yàn)閿?shù)據(jù)也并沒(méi)有真正丟失,而是變成了一個(gè)orphan volume,(沒(méi)人引用的卷?)

        解決

        那么情況就清楚了,現(xiàn)在我找到之前MySQL容器用到的這個(gè)volume,把里面的數(shù)據(jù)文件提取出來(lái)重新映射就好了

        volume文件路徑是/var/lib/docker/volumes/

        里面有一堆volume文件夾,現(xiàn)在只能一個(gè)個(gè)慢慢看了

        也可以執(zhí)行du命令,根據(jù)大小來(lái)做一個(gè)預(yù)估

        最終我找到了一個(gè)2.9G的目錄,打開(kāi)看到里面的數(shù)據(jù)就是MySQL的

        那就好辦了

        cd到這個(gè)volume的目錄中,把數(shù)據(jù)文件復(fù)制出來(lái)

        cp?-r?_data?/var/lib/mysql

        然后修改之前的docker-compose.yml配置文件

        version:?"3"
        services:
        ??mysql:
        ????image:?daocloud.io/mysql
        ????volumes:
        ??????-?/var/lib/mysql:/var/lib/mysql
        ????environment:
        ??????-?MYSQL_ROOT_PASSWORD=1234
        ????expose:
        ??????-?3306

        添加上volumes配置就好了~

        重新啟動(dòng)容器

        docker-compose?up?-V

        我一開(kāi)始不知道要加-V參數(shù),映射了volume之后MySQL還一直沒(méi)數(shù)據(jù)

        后面看了文檔才知道不加-V會(huì)一直使用原來(lái)的volume

        小結(jié)

        雖然是把數(shù)據(jù)給恢復(fù)起來(lái)了,但問(wèn)題其實(shí)還沒(méi)完全解決,到這里還留下一個(gè)疑問(wèn):一開(kāi)始那個(gè)故障是怎么來(lái)的?MySQL容器為啥會(huì)莫名其妙無(wú)法連接?

        這個(gè)問(wèn)題暫時(shí)還不清楚,后續(xù)再看看binlog分析一下。

        最后,這次出的故障帶來(lái)幾個(gè)教訓(xùn)

        • 不要偷懶,volume一定要提前映射好
        • docker知識(shí)匱乏,一知半解,得系統(tǒng)學(xué)一下
        • docker-compose的管理方式還是比較原始,是不是要找機(jī)會(huì)上更現(xiàn)代化的容器管理方式?

        參考資料

        • Docker mysql容器數(shù)據(jù)庫(kù)丟失找回指北:http://i.lckiss.com/?p=4222


        瀏覽 43
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美成人在线免费视频 | 国产伦精品一区二区 | 俺也去最新网址 | 天天草天天 | 国模一区二区三区视频 | 韩国电影黄色片 | 女人让男人桶爽的 | 小娇妻h+肉+高h+瘾 | 多人交换做爰变成三p | 国产一线天粉嫩馒头极品AV |