<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 1289字,需瀏覽 3分鐘

           ·

          2022-05-30 23:44

          問題

          昨天下午本來要去吃下午茶,然后前端小伙伴突然說接口怎么崩了,我登上sentry一看,報錯了

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

          啥意思啊,連不上數(shù)據(jù)庫,host是mysql因為這是在docker環(huán)境里

          直接ssh連上服務器查看,沒啥問題呀,MySQL容器也正常運行著

          奇怪

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

          手動docker stop一下,再重新docker compose up

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

          找原因

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

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

          現(xiàn)在強制stop的時候沒有先commit,所以就導致容器數(shù)據(jù)“丟失”

          我這里用了雙引號,因為數(shù)據(jù)也并沒有真正丟失,而是變成了一個orphan volume,(沒人引用的卷?)

          解決

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

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

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

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

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

          那就好辦了

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

          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配置就好了~

          重新啟動容器

          docker-compose?up?-V

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

          后面看了文檔才知道不加-V會一直使用原來的volume

          小結(jié)

          雖然是把數(shù)據(jù)給恢復起來了,但問題其實還沒完全解決,到這里還留下一個疑問:一開始那個故障是怎么來的?MySQL容器為啥會莫名其妙無法連接?

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

          最后,這次出的故障帶來幾個教訓

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

          參考資料

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


          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线观看亚洲 | 国产精品美女一区 | 豆花一区二区三区 | 无码性爱视频在线观看 | 天天天天干 |