放完假後 MySQL Server 就掛了,不是每個錯誤都能靠 Google 找到解答

林鼎淵
Dean Lin
Published in
5 min readJun 21, 2022

--

如果你用上圖的錯誤訊息去 Google 搜尋,相信會得到很多解答;但這篇文章遇到的問題,如果用關鍵字搜尋是找不到真正解答的;也因為這次的經驗讓我對 Ubuntu Server、MySQL、apt-mark 有更深一層的認識。

大綱ㄧ、問題描述二、關鍵字搜尋到的方案三、從 Error Log 猜想問題四、問題的真實原因五、解決方案六、後記

ㄧ、問題描述

上週建立的中介資料庫在經歷一個假日後,在禮拜一被同事回報登入失敗。

一開始我以為是帳號密碼錯誤,又或是公司網路問題;但在成功登入 Server 後,我發現連 root 的權限都無法登入 MySQL DB,並出現如下錯誤:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

二、關鍵字搜尋到的方案

遇事不知求 Google,我馬上搜尋過去前輩們是怎麼解決這個問題的。

解決的方法五花八門,我這邊統整一下大致的方向:

  1. 重啟 MySQL 服務
  2. 調整 MySQL 資料夾權限,補齊遺漏的檔案
  3. 重啟整台 Server
  4. 把 MySQL 砍掉重裝

但很遺憾的,1~3 我都嘗試過了,MySQL 依舊頑強的吐一樣的錯誤,看來不能依靠網路的的解法了。

三、從 Error Log 猜想問題

因為網路上的方案都失效,所以決定換一個問題處理的方向,去找 MySQL 的 Error Log(其實一開始應該就要這樣做)。

STEP 1:前往 MySQL 的設定檔。

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

STEP 2:查看 Error Log 存放路徑。

STEP 3:查看 Error Log 內容。

sudo vim /var/log/mysql/error.log

從時間軸發現服務被完整的關閉後就無法重啟,但假日有誰會把服務給關閉呢?

於是我便詢問公司的 MIS 部門,在假日是否有對 Server 進行維護作業。

果然如我所料,對方表示在假日有對各 Server 系統做例行性維護升級,而這台 Ubuntu Server 的 MySQL 正是在這次升級後出問題。

四、問題的真實原因

既然問題是由系統升級引起的,那就比較有解決的方向了;在與 MIS 同仁討論後,我們猜想問題應該是 Ubuntu Server 升級後內建的 MySQL 版本為 8.0,但原本安裝的版本為 5.7,因此在升級後發生版本對應不到的問題。

於是我們便執行下面的指令來查看目前 apt 安裝的套件有哪些,以及對應的版本:

apt list --installed

結果如我們所想,系統更新後,新版本的 MySQL 真的把舊版本給覆蓋住了。

五、解決方案

但因為這台是給其他合作單位使用的資料庫,而對方因為總總歷史包袱只能選用 MySQL 5.7,所以我們是不能對它做升級的。

但幸好 MIS 在維護前有先將 Server 備份,因此我們如下步驟進行處理:

STEP 1:用備份將原本的 Ubuntu Server 還原。

STEP 2:下指令將 MySQL Server 版本鎖定。

apt-mark hold mysql-server

STEP 3:查看是否有鎖定成功。

apt-mark showhold

STEP 4:鎖定後再將 Ubuntu Server 做升級維護。

STEP 5:升級完成後確認 MySQL 版本有鎖定住。

mysql --version

透過上面的步驟後,MySQL 就成功復活了~

六、後記

這個問題花了不少時間才解決,主要是因為我在一開始判斷問題時就走偏了;過去我都是從錯誤訊息找答案,而這次的錯誤訊息卻把我引導到另一個錯誤的方向。

這次的經驗也讓我明白,除了發生問題的本體外,還要多觀察其他有「相依性」的資訊,否則會陷入死胡同,還期待用錯誤的方法得到正確的結果。

但同時也提醒大家,千萬不要看完這篇文章後,回去就把所有安裝的套件版本都鎖死;除非有不得已的理由,不然系統、套件都是需要定期更新的,這樣穩定性、安全性才足夠。

▶︎ 如果這篇文章有幫助到你1. 可以點擊下方「Follow」來追蹤我~
2. 可以對文章拍手讓我知道 👏🏻
你們的追蹤與鼓勵是我繼續寫作的動力 🙏🏼▶︎ 如果你對工程師的職涯感到迷茫1. 也許我在iT邦幫忙發表的系列文可以給你不一樣的觀點 💡
2. 也歡迎您到書局選購支持,透過豐富的案例來重新檢視自己的職涯

--

--

林鼎淵
Dean Lin

職涯中培育過多名工程師,🧰 目前在外商公司擔任 Software Specialist |✍️ 我專注寫 (1)最新技術 (2)團隊合作 (3)工程師職涯的文章,出版過 5 本專業書籍|👏🏻 如果對這些主題感興趣,歡迎點擊「Follow」來關注我~