建立「預防性維護時間表」是 DBA 核心職責:定期備份、定期檢查、啟動期檢查。本篇聚焦**作業系統啟動階段自動檢查表**,對比 BSD 風格 (/etc/rc.local) 與 System V 風格 (/etc/rc.d/) 兩種啟動體系的整合方式,給出可直接部署的腳本範本。
myisam_recover_options=BACKUP,FORCE (5.1+) 可實現服務內建自動修復,但離線 myisamchk 更徹底、可控。適用:FreeBSD、OpenBSD、NetBSD、Linux(傳統 SysVinit 兼容 rc.local)。
# /etc/rc.local (在 mysqld 啟動命令之前插入)
# 檢查並修復所有 MyISAM 表
if [ -x /usr/local/mysql/bin/myisamchk ]; then
echo "Checking MyISAM tables..."
cd /usr/local/mysql/var
/usr/local/mysql/bin/myisamchk -s -r *.MYI 2>/dev/null
# -s 靜默、-r 修復模式(自動修復發現的錯誤)
fi
# 然後啟動 MySQL
/usr/local/mysql/bin/mysqld_safe --user=mysql &
適用:RHEL/CentOS 6、Solaris、AIX、HP-UX 等商業 Unix。
建立 /etc/rc.d/init.d/mysql.check:
#!/bin/sh
# chkconfig: 2345 19 81 # 啟動順序 19 (在 mysqld 通常 60 之前),關閉順序 81
# description: MySQL tables pre-start check and repair
case "$1" in
start)
echo -n "Checking MySQL tables: "
if [ -x /usr/local/mysql/bin/myisamchk ]; then
cd /usr/local/mysql/var
/usr/local/mysql/bin/myisamchk -s -r *.MYI 2>/dev/null
RETVAL=$?
if [ $RETVAL -eq 0 ]; then echo "OK"; else echo "FAILED"; fi
else
echo "SKIPPED (myisamchk not found)"
RETVAL=0
fi
;;
stop)
# 無需操作
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
安裝與排序:
chmod +x /etc/rc.d/init.d/mysql.check
# 假設 mysql 啟動腳本連結為 S60mysqld (啟動順序 60)
ln -s /etc/rc.d/init.d/mysql.check /etc/rc.d/rc3.d/S19mysql.check
# S19 < S60 確保檢查在 mysqld 啟動前完成
rc.local 兼容但非首選。/etc/systemd/system/mysql-check.service:
[Unit]
Description=MySQL Pre-start Table Check
Before=mysqld.service
ConditionPathExists=/usr/local/mysql/bin/myisamchk
[Service]
Type=oneshot
User=mysql
WorkingDirectory=/usr/local/mysql/var
ExecStart=/usr/local/mysql/bin/myisamchk -s -r *.MYI
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
systemctl enable mysql-check && systemctl start mysql-check。myisamchk -s *.MYI:純檢查,發現錯誤**不修復**,僅報錯(適合人工介入環境)。myisamchk -s -r *.MYI:檢查並**自動修復**(適合無人值守啟動期)。myisam_recover_options=BACKUP,FORCE 雙重保障。| 頻率 | 任務 | 工具/命令 | 備註 |
|---|---|---|---|
| 每日 | 全庫備份 | mysqldump / Percona XtraBackup | 異地存儲、驗證可還原 |
| 每日 | 慢查詢分析 | pt-query-digest / mysqldumpslow | 優化 Top 10 |
| 每週 | 表檢查巡檢 | myisamchk -s -C / mysqlcheck -A -c | 離線/線上視引擎 |
| 每月 | 索引碎片整理 | OPTIMIZE TABLE / ALTER TABLE ... ENGINE=InnoDB | 配合 ANALYZE TABLE |
| 啟動時 | MyISAM 表自動修復 | myisamchk -s -r / myisam_recover_options | 本文核心 |
| 變更時 | Schema 變更審計 | pt-online-schema-change / gh-ost | 無鎖變更 |