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

MySQL 預防性維護完整方案:自動化表檢查、啟動驗證與日誌輪轉

     編輯:MySQL 資料庫相關知識

維護三大支柱

  1. 定期備份 + 啟用更新日誌:災難恢復基石。
  2. 排程自動表檢查:早發現、早修復,減少需從備份恢復的機率。
  3. 開機啟動前強制檢查:防止非正常關機導致的表損壞上線。

自動表檢查腳本設計

簡易版 (適用表數較少)

#!/bin/sh
DATADIR=/var/lib/mysql
cd $DATADIR
# MyISAM 表
myisamchk --silent --fast */*.MYI
# ISAM 表 (舊版)
isamchk --silent */*.ISM

--silent 僅輸出錯誤,--fast 跳過未修改過的表。

健壯版 (避免參數過多導致 Shell 錯誤)

#!/bin/sh
DATADIR=/var/lib/mysql
find $DATADIR -name '*.MYI' -type f | xargs myisamchk --silent --fast
find $DATADIR -name '*.ISM' -type f | xargs isamchk --silent

部署與驗證

chmod +x check_mysql_tables
./check_mysql_tables  # 手動測試,理想情況無輸出

排程自動執行

cron 定期檢查 (每週日 03:00)

# 以 mysql 使用者身份
crontab -e
0 3 * * 0 /usr/local/mysql/bin/check_mysql_tables

開機啟動檢查 (System V 風格)

  1. 建立 /etc/rc.d/init.d/mysql.check:
#!/bin/sh
case "$1" in
  start)
    /usr/local/mysql/bin/check_mysql_tables
    ;;
  stop)
    # nothing
    ;;
esac
  1. 建立軟連結確保在 mysql.server 前執行:
    ln -s ../init.d/mysql.check /etc/rc.d/rc3.d/S98mysql.check
    (假設 mysql.server 為 S99)

外部鎖定與並發注意

  • 若系統支援外部鎖定 (--enable-locking),myisamchk 會協調 Server,不會誤報。
  • 無外部鎖定時,檢查過程中 Server 若寫入同表,可能誤報錯誤(寧可誤報不可漏報)。
  • 多實例環境:複製腳本並修改 DATADIR,或改為接受參數指定資料目錄。

日誌輪轉與清理 (logrotate)

  • General Log:每天輪轉,保留 7 天。
  • Slow Query Log:每週輪轉,保留 4 週。
  • Binary Log:expire_logs_days=7 自動清理,或搭配 mysqlbinlog --purge。
  • Linux 建議使用 logrotate 管理,MySQL 分發包含 mysql-log-rotate 範例。

總結清單

任務頻率工具/指令備註
全量備份每日mysqldump --single-transaction --opt異地存放
表檢查修復每週mysqlcheck -A --auto-repair / check_mysql_tables低峰期
啟動前檢查每次開機mysql.check init scriptSystemd 可用 ExecStartPre
日誌輪轉每日logrotate / expire_logs_days防磁碟爆滿
備份驗證每月還原測試至測試環境確保可用性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved