對於這樣定期的維護,你的服務器最好支持外部鎖定,這樣在檢查表時,就不會發生訪問沖突的情況。如果無法做到這一點,你最好在沒有用戶使用服務器的時候維護,例如凌晨。
在系統啟動期間檢查表
如果你使用的是BSD風格的系統,例如OpenBSD,FreeBSD等,並且已經將服務器的啟動命令增加到/etc/rc.local,要在啟動期間檢查表,可以在啟動服務器前從相應的文件中調用check_tables。
如果對於使用Sytem V風格的啟動方法的系統,例如,大多數的商業Unix系統,其啟動方法是從/etc/rc.d目錄之一調用MySQL.server腳本,則在數據庫啟動前檢查表的過程比較復雜,因為這些目錄中的腳本必須理解start和stop參數。
例如,象這樣編寫腳本,取名MySQL.check當參數時start時調用check_tables,當參數是stop時什麼也不做:
#!/bin/sh
#See hou we sere called
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)
#don’t do anything
;;
*)
echo “Usage:$o{start|stop}”
exit 1
esac
exit 0
現在你可以安裝mysql.check了,該過程類似乎在第二章介紹的讓服務器自動啟動的安裝mysql.server的過程。必須給mysql.check一個運行級目錄中較低的前綴號,才能使它在mysql.server前運行。例如,如果在運行級目錄中以S99mysql.server連接到mysql.server,則應該以S98mysql.check鏈接到MySQL.check。
由於Linux集中了BSD和Sytem V系統的優點,所以,上面兩種方法完全適用於Linux。為了簡便起見,一般使用第一個方法。