#!/bin/sh
DATADIR=/var/lib/mysql
cd $DATADIR
# MyISAM 表
myisamchk --silent --fast */*.MYI
# ISAM 表 (舊版)
isamchk --silent */*.ISM
--silent 僅輸出錯誤,--fast 跳過未修改過的表。
#!/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 # 手動測試,理想情況無輸出
# 以 mysql 使用者身份
crontab -e
0 3 * * 0 /usr/local/mysql/bin/check_mysql_tables
/etc/rc.d/init.d/mysql.check:#!/bin/sh
case "$1" in
start)
/usr/local/mysql/bin/check_mysql_tables
;;
stop)
# nothing
;;
esac
mysql.server 前執行:ln -s ../init.d/mysql.check /etc/rc.d/rc3.d/S98mysql.check--enable-locking),myisamchk 會協調 Server,不會誤報。DATADIR,或改為接受參數指定資料目錄。expire_logs_days=7 自動清理,或搭配 mysqlbinlog --purge。logrotate 管理,MySQL 分發包含 mysql-log-rotate 範例。| 任務 | 頻率 | 工具/指令 | 備註 |
|---|---|---|---|
| 全量備份 | 每日 | mysqldump --single-transaction --opt | 異地存放 |
| 表檢查修復 | 每週 | mysqlcheck -A --auto-repair / check_mysql_tables | 低峰期 |
| 啟動前檢查 | 每次開機 | mysql.check init script | Systemd 可用 ExecStartPre |
| 日誌輪轉 | 每日 | logrotate / expire_logs_days | 防磁碟爆滿 |
| 備份驗證 | 每月 | 還原測試至測試環境 | 確保可用性 |