自由學習的風

幽夢影 張潮 少年讀書,如隙中窺月;中年讀書,如庭中望月;老年讀書,如臺上玩月。皆以閱歷之淺深,為所得之淺深耳。

[AIgen] 機器掛了,只有Linux映像檔,如何找回定時執行的設定?

2026年8月10日 星期一

當伺服器突然崩潰、無法正常開機,而你手邊只剩下一份 Linux 系統映像檔(Image),或者是好不容易將硬碟掛載(Mount)到臨時系統的 /mnt/lvm 目錄時,身為維運或開發人員的你,該如何拯救那些珍貴的 Crontab 定時排程設定?

在正常的 Linux 環境下,我們習慣直接輸入 crontab -l 來查看排程。然而,在目前只有掛載目錄、沒有開機的狀態下,因為背景服務(Cron Daemon)根本沒有執行,這個指令是完全無法運作的。

這時候,我們必須跳過指令,直接深入映像檔的結構。本文將帶你手把手透過三個方向,直接去 /mnt/lvm 底下把所有遺失的定時設定挖出來!


方法一:直擊使用者排程(User Crontabs)

在 Linux 系統中,所有個別使用者(包含 root 帳號)自行透過 crontab -e 建立的排程,本質上都是一個獨立的文字檔,並以「使用者名稱」作為檔名儲存在特定的緩衝目錄中。

既然映像檔已經掛載在 /mnt/lvm,我們可以直接查看底下的對應路徑:

🔍 檢索步驟:

1. 列出所有擁有排程的使用者:

ls -la /mnt/lvm/var/spool/cron/crontabs/

2. 直接查看該使用者的排程內容:

cat /mnt/lvm/var/spool/cron/crontabs/[使用者名稱]

*(例如:欲查看 root 的排程,請輸入 cat /mnt/lvm/var/spool/cron/crontabs/root)*


方法二:地毯式搜尋系統級排程(System-wide Crontabs)

如果你的排程當初是交由系統全域執行,或是由特定軟體套件自動建立的,它們通常不會出現在上述的使用者目錄中,而是散落在系統設定的 /etc 目錄內。

請依序檢查 /mnt/lvm 底下的這四個關鍵位置:

  • 📁 主要核心設定檔: 這是系統最基礎的排程表。
    cat /mnt/lvm/etc/crontab
  • 📁 獨立套件排程目錄: 許多第三方軟體(如自動備份工具、安全防護套件)會將排程獨立寫成檔案放在這裡。
    ls -la /mnt/lvm/etc/cron.d/
  • 📁 週期性執行腳本目錄: 檢查系統預設的週期性資料夾,裡面通常放著直接被定時觸發的 Shell Script(腳本檔)。
    • /mnt/lvm/etc/cron.hourly/ (每小時執行)
    • /mnt/lvm/etc/cron.daily/ (每天執行)
    • /mnt/lvm/etc/cron.weekly/ (每週執行)
    • /mnt/lvm/etc/cron.monthly/ (每月執行)

方法三:終極大絕!從系統日誌(Logs)逆向重建

如果最糟糕的情況發生了——定時排程的檔案已經損毀,或者你在上述目錄完全找不到紀錄,我們還有一招隱藏版技巧:從舊系統過去的執行紀錄中逆向推敲。

只要該排程在機器掛掉前曾經執行過,Linux 的日誌系統就會留下足跡。我們可以透過分析舊系統的日誌,查出過去「什麼時間點」執行了「什麼指令」,進而重新拼湊出原本的 Crontab 設定。

🔍 逆向追蹤指令:

grep -i cron /mnt/lvm/var/log/syslog

*(註:視舊系統的 Linux 版本與環境不同,部分舊系統或特定發行版的紀錄可能會儲存在 /mnt/lvm/var/log/cron 檔案中。)*


💡 進階技巧:直接切換環境執行

如果你覺得路徑一直加 /mnt/lvm/ 很麻煩,或者你想直接在該映像檔環境下執行其他需要環境變數的救援指令,你可以利用 chroot 工具,把目前終端機的根目錄直接「切換」進去:

sudo chroot /mnt/lvm

切換成功後,你就可以直接輸入 crontab -l(此時讀取的就是映像檔內的排程),或是直接用正常的 /etc/crontab 路徑進行操作囉!

希望這篇文章能幫各位在伺服器災難復原時,快速找回遺失的自動化排程!

[AIgen] MariaDB 生產環境怎麼選?從 10.11、11.4 到 12.3 LTS 的升級風險與最佳路徑指南

在維護企業級或個人專案的資料庫時,選擇一個穩定、支援週期長的 LTS(長期支援) 版本是至關重要的決定。隨著 MariaDB 官方近年架構更動頻繁,許多仍停留在經典版本(如 10.11 LTS)的維運人員,正面臨是否該升級、該跳到哪一個世代的交叉路口。

本文將為你梳理目前主流的 MariaDB LTS 版本特點,並深度解析跨代升級(10 LTS 升級到 11 或 12 LTS)的潛在風險與安全路徑,幫你的資料庫無痛續命!


📌 一張表看懂現行 MariaDB LTS 版本現況

MariaDB 官方針對生產環境提供了不同的長期支援版本。以下是目前市面上最主要的四大 LTS 選擇:

  • MariaDB 10.11 LTS (經典穩健):廣泛使用的舊世代穩定版本,支援至 2028 年 2 月
  • MariaDB 11.4 LTS (目前主力推薦):穩定可靠的長期維護版本,也是目前的黃金升級目標,支援至 2029 年 5 月
  • MariaDB 11.8 LTS (過渡型 LTS):包含向量搜尋與複製效能增強的年度 LTS 版本,支援至 2028 年 6 月
  • MariaDB 12.3 LTS (最新世代):最新推出的長期支援版本,提供優化的向量搜尋與極佳的寫入效能。

🛑 大跨代升級:從 10 LTS 直升 12 LTS 有哪些風險?

如果你的資料庫目前處於 10.11 LTS,想要一步到位直接升級到 12.3 LTS官方非常不建議這樣做,因為這屬於跨越兩個大版本的重大變更,具備相當高的風險!

直接跨代硬幹,最容易遇到以下三大核心問題:

  1. 隔離級別預設值變更(Behavior Change)
    在 12.3 LTS 中,innodb_snapshot_isolation 的預設值改成了 ON(旨在讓 REPEATABLE READ 的行為更精確)。這可能會改變你既有應用程式的交易(Transaction)鎖定行為,必須實測確認。
  2. 查詢優化器(Optimizer)行為劇變
    11.x 世代對優化器进行了大量重構,全面調整了成本估算模型。部分在舊版 10.x 跑得很快的複雜 SQL 語法,在 12.x 可能因為成本估算模型改變而突然變慢,產生效能退化(Regressions)。
  3. 廢棄參數與套件依賴衝突
    10.11 的許多舊 my.cnf 參數在 12.x 已被移除,直接沿用可能導致資料庫無法啟動。另外,若有使用 Galera Cluster,12.3 起已移除自動依賴,必須手動補裝 mariadb-server-galera,否則叢集會直接無法同步。
⚠️ 官方推薦的安全路徑:必須採兩階段升級。先從 10.11 LTS 升級至 11.4 LTS 並執行結構更新,確認穩定後,再從 11.4 LTS 升級至 12.3 LTS。

💡 折衷方案:如果只升級到 11.4 LTS 呢?

相較於直奔 12 LTS,選擇升級到 11.4 LTS 是目前風險顯著降低、且最為穩健的策略

從 10.11 到 11.4 是一條官方標準支援的直升路徑,不需要多階段過渡。不過,11.4 畢竟也是重大升級(Major Upgrade),你仍需留意以下轉變:

  • 優化器成本模型調整:雖然 11.x 的新優化器對大部分查詢都有利,但極少數複雜的 JOIN 或特定索引查詢仍可能誤判。
  • 徹底移除 InnoDB Change Buffer:為了簡化代碼並提升現代 SSD 的寫入穩定性,11.0 起已移除此快取。如果應用程式有極大量的「隨機非聚集索引寫入」,可能會觀察到磁碟 I/O 壓力些微上升。
  • 一樣不可逆向降級:11.4 使用了全新的 InnoDB 檔案格式與 Redo Log 架構。一旦升級並更新系統表,資料檔案將永久無法退回 10.11 讀取

📊 升級終極對決:11.4 LTS vs 12.3 LTS

評估維度 升級至 11.4 LTS 升級至 12.3 LTS
路徑複雜度 🟢 (可直接從 10.11 覆蓋升級) 🔴 (需先過渡到 11.4,進行兩次升級)
隔離級別行為 🟢 無變更(維持既有鎖定邏輯) 🟡 有變更innodb_snapshot_isolation 預設開啟)
Galera 套件結構 🟢 維持原樣 🟡 結構拆分(需手動補裝 Galera 套件)
生產環境建議度 極高(目前最推薦的穩定長效版本) 🔵 (適合需要最新向量搜尋特性的團隊)

🛠️ 維運人員的「防踩雷」升級準備

不論你最後決定升級到 11.4 還是 12.3,在動手更新 production 環境前,請務必嚴格執行以下三件事:

  1. 乾淨關閉(Clean Shutdown):升級前關閉服務時,務必確認 innodb_fast_shutdown 不可設定為 2(不可強制崩潰關閉),以確保 Redo Log 完全清空、資料全面落盤,否則新版二進位檔案可能無法讀取舊日誌。
  2. 完整的物理與邏輯備份:升級失敗是無法直接降級的!請務必使用 MariaDB Backup 進行完整物理備份,並針對 mysql 系統資料庫進行 mariadb-dump 備份。
  3. 搭建 Staging 環境盲測:強烈建議匯入一份真實資料到測試機,模擬升級流程,並將後端應用的壓測腳本導過去跑一次,觀察有沒有噴任何 SQL 語法錯誤或效能嚴重下滑的現象。

結語

如果你的專案沒有迫切需要 12.x 的新功能(例如最新版的向量搜尋優化),現階段將舊環境升級到 11.4 LTS 是投資報酬率最高、也最安全的選擇。它不僅能避開 12.x 許多行為改變的風險,還能穩定地將你的資料庫安全生命週期一口氣延長到 2029 年。