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

MySQL 資料庫規範化設計與預防性維護(一):建立維護規範、自動巡檢腳本編寫與啟動期檢查策略

     編輯:MySQL 資料庫相關知識

資料庫維護不應等到故障發生才被動應對。本系列首篇建立**預防性維護體系**:定期備份+Binlog、定期巡檢、啟動期自動修復,並提供從簡單到健壯的巡檢腳本範本,奠定無人值守運維基石。

預防性維護三大支柱

  1. 常規備份 + 啟用 Binlog:全量/增量備份離線存儲,Binlog 保留 7-30 天,支援 PITR。
  2. 定期表巡檢:每日/每週掃描,早發現早修復,降低需從備份恢復的概率。
  3. 啟動期檢查:OS 啟動 → MyISAM 表自動檢查修復 → MySQL 啟動,確保服務上線即健康。

排程工具:Windows 用「計劃任務」,Linux/Unix 用 cron(以運行 MySQL 的系統用戶 mysql 的 crontab 執行)。

巡檢腳本設計原則

  • 以 mysql 系統用戶身份運行,避免檔案擁有權污染。
  • 使用 myisamchk --silent --fast:
    • --silent (-s) 僅報錯,配合 Cron 郵件機制「無錯不郵件」。
    • --fast (-C) 僅檢查上次檢查後被修改的表,大幅縮短耗時。
  • 支援 find | xargs 解決大量表通配符參數溢位。
  • 支援多資料目錄(多實例/分庫部署)。

腳本範本 1:簡單版(單目錄、表數<500)

#!/bin/sh
# 簡單巡檢
cd /usr/local/mysql/var
myisamchk --silent --fast */*.MYI
isamchk --silent */*.ISM

腳本範本 2:健壯版(生產推薦)

#!/bin/sh
# /usr/local/mysql/bin/check_tables
DATADIRS="/usr/local/mysql/var /data/mysql2/var"

for DATADIR in $DATADIRS; do
    if [ -d "$DATADIR" ]; then
        find "$DATADIR" -name '*.MYI' -print | xargs /usr/local/mysql/bin/myisamchk --silent --fast
        find "$DATADIR" -name '*.ISM' -print | xargs /usr/local/mysql/bin/isamchk --silent
    fi
done

部署步驟標準化

  1. su - mysql 切換專用用戶。
  2. vi /usr/local/mysql/bin/check_tables 編寫腳本(選健壯版)。
  3. chmod +x /usr/local/mysql/bin/check_tables 賦予執行權限。
  4. /usr/local/mysql/bin/check_tables 手工測試,確認無語法錯誤、無誤報。
  5. crontab -e 加入排程,例:0 3 * * 0 /usr/local/mysql/bin/check_tables(每週日 03:00)。

啟動期自動檢查策略

啟動體系整合方式關鍵點
BSD / rc.local在 mysqld 啟動命令前插入 myisamchk -s -r簡單、通用、Linux 兼容佳
System V / rc.d建立獨立 S19mysql.check 腳本,chkconfig 管理標準、可控、順序明確
systemd (現代)建立 mysql-check.service,Before=mysqld.service原生、依賴關係聲明式、日誌整合

核心參數:myisamchk -s -r(靜默 + 自動修復),配合 myisam_recover_options=BACKUP,FORCE 雙保險。

系列導覽

  1. (一)維護規範、巡檢腳本、啟動期策略 ← 當前篇
  2. (二)健壯腳本實作、Cron 部署、無人值守、InnoDB 差異
  3. (三)System V/BSD/rc.local/systemd 整合細節、完整維護清單

立即行動清單

  • [ ] 確認備份策略(全量+增量、異地、定期演練還原)。
  • [ ] 確認 log_bin 已啟用、expire_logs_days 設定合理。
  • [ ] 部署 check_tables 健壯版腳本至 /usr/local/mysql/bin/。
  • [ ] 以 mysql 用戶建立 cron 週巡檢任務。
  • [ ] 依 OS 類型配置啟動期自動修復(rc.local / systemd)。
  • [ ] 規劃 MyISAM → InnoDB 遷移時間表,簡化維護體系。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved