下列對MySQLd 的選項可用來改變MyISAM表的行為:
·--myisam-recover=mode
設置為崩潰MyISAM表自動恢復的模式。
·--delay-key-write=ALL
對任何MyISAM表的寫操作之間不要刷新鍵緩沖區。
注釋:如果你要這麼做。當表在使用中之時,你應該不使用來自另一個程序的MyISAM表(比如從另一個MySQL服務器或用myisamchk)。這麼做會導致索引被破壞。
對使用--delay-key-write的表,使用--external-locking沒有幫助。
列系統變量影響MyISAM表的行為:
·bulk_insert_buffer_size
用在塊插入優化中的樹緩沖區的大小。注釋:這是一個per thread的限制。
·(OBSOLETE) myisam_max_extra_sort_file_size
這個參數已經不在MySQL中使用。
·myisam_max_sort_file_size
如果臨時文件會變得超過索引,不要使用快速排序索引方法來創建一個索引。注釋:這個參數以字節的形式給出。
·myisam_sort_buffer_size
設置恢復表之時使用的緩沖區的尺寸。
如果用--myisam-recover選項啟動MySQLd,自動恢復被激活。在這種情況下,當服務器打開一個MyISAM表之時,服務器會檢查是否表被標注為崩潰,或者表的打開計數變量是否不為0且你正用--skip-external-locking運行服務器。如果這些條件的任何一個為真,下列情況發生:
·表被查錯。
·如果服務器發現一個錯誤,它試著做快速表修復(排序且不重新創建數據文件)。
·如果修復因為數據文件中的一個錯誤而失敗(例如,一個重復鍵錯誤),服務器會再次嘗試修復,這一次重建數據文件。
· 如果修復仍然失敗,服務器用舊修復選項方法再重試一次修復(一行接一行地寫,不排序)。這個方法應該能修復任何類型的錯誤,並且需要很低的磁盤空間。
如果恢復不能夠從先前完成的語句裡恢復所有行,而且你不能在--myisam-recover選項值指定FORCE,自動修復會終止,並在錯誤日志裡寫一條錯誤信息:
Error: Couldn't repair table: test.g00pages
如果你指定FORCE,取而代之地,類似這樣的一個警告被給出:
Warning: Found 344 of 354 rows when repairing ./test/g00pages
注釋:如果自動恢復值包括BACKUP,恢復進程創建文件並用tbl_name-datetime.BAK形式取名。你應該有一個cron腳本,它自動把這些文件從數據庫目錄移到備份媒質上