首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料庫預防性維護腳本與自動化實戰

     編輯:MySQL 資料庫相關知識

核心原則

定期主動檢查表狀態,而非等待故障發生。建立預防性維護排程,自動發現並修正潛在問題。

維護任務清單

  • 常規備份 + 啟用二進制日誌
  • 定期表檢查(myisamchk/isamchk)
  • 系統啟動前檢查(防崩潰殘留損壞)

自動化檢查腳本

簡易版腳本

#!/bin/sh
cd DATADIR
myisamchk --silent --fast */*.MYI
isamchk --silent */*.ISM

--silent:僅報錯;--fast:跳過未修改表。

進階版(解決參數過多問題)

#!/bin/sh
datadir=DATADIR
find $datadir -name "*.MYI" -print | xargs myisamchk --silent --fast
find $datadir -name "*.ISM" -print | xargs isamamchk --silent

部署與執行

su mysql
vi check_tables
chmod +x check_tables
./check_tables  # 手動測試,理想情況無輸出

Linux cron 定期執行

su mysql
crontab -l > /tmp/entries
echo "0 0 * * 0 /usr/local/mysql/bin/check_tables" >> /tmp/entries
crontab /tmp/entries

每週日 00:00 執行,有錯誤才發郵件通知(因 --silent)。

系統啟動時檢查

BSD 風格(/etc/rc.local)

在啟動 MySQL 服務前呼叫 check_tables。

System V 風格(/etc/rc.d/)

建立 mysql.check 腳本處理 start/stop 參數:

#!/bin/sh
case "$1" in
start)
    echo -n "Checking MySQL tables:"
    if [ -x /usr/local/mysql/bin/check_tables ]; then
        /usr/local/mysql/bin/check_tables
    fi;;
stop) ;;
*) echo "Usage: $0 {start|stop}"; exit 1;;
esac
exit 0

安裝連結:S98mysql.check → mysql.check(早於 S99mysql.server)。

Linux 兼容兩種方式

Linux 綜合 BSD/System V,建議使用 rc.local 簡單法。

重要提醒

  • 檢查時若不支援外部鎖定,服務器可能修改表導致誤報;建議維護窗口停止服務或啟用外部鎖定
  • InnoDB 表無需 myisamchk,使用 CHECK TABLE SQL 指令
  • 定期 ANALYZE TABLE 更新統計資訊,優化查詢計劃
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved