下列 mysqld 的選項可用於變更 MyISAM
資料表的行為。如需其他資訊,請參閱 第 7.1.7 節,〈伺服器命令選項〉。
表 18.3:MyISAM 選項和變數參考
名稱 | 命令列 | 選項檔案 | 系統變數 | 狀態變數 | 變數範圍 | 動態 |
---|---|---|---|---|---|---|
bulk_insert_buffer_size | 是 | 是 | 是 | 兩者 | 是 | |
concurrent_insert | 是 | 是 | 是 | 全域 | 是 | |
delay_key_write | 是 | 是 | 是 | 全域 | 是 | |
have_rtree_keys | 是 | 全域 | 否 | |||
key_buffer_size | 是 | 是 | 是 | 全域 | 是 | |
log-isam | 是 | 是 | ||||
myisam-block-size | 是 | 是 | ||||
myisam_data_pointer_size | 是 | 是 | 是 | 全域 | 是 | |
myisam_max_sort_file_size | 是 | 是 | 是 | 全域 | 是 | |
myisam_mmap_size | 是 | 是 | 是 | 全域 | 否 | |
myisam_recover_options | 是 | 是 | 是 | 全域 | 否 | |
myisam_sort_buffer_size | 是 | 是 | 是 | 兩者 | 是 | |
myisam_stats_method | 是 | 是 | 是 | 兩者 | 是 | |
myisam_use_mmap | 是 | 是 | 是 | 全域 | 是 | |
tmp_table_size | 是 | 是 | 是 | 兩者 | 是 |
下列系統變數會影響 MyISAM
資料表的行為。如需其他資訊,請參閱 第 7.1.8 節,〈伺服器系統變數〉。
用於大量插入最佳化的樹狀快取大小。
注意這是每個執行緒的限制!
不要在任何
MyISAM
資料表的寫入之間清除索引緩衝區。注意如果這麼做,當資料表正在使用時,您不應該從另一個程式 (例如從另一個 MySQL 伺服器或使用 myisamchk) 存取
MyISAM
資料表。這麼做有索引損毀的風險。使用--external-locking
無法消除此風險。MySQL 在重新建立
MyISAM
索引時 (在REPAIR TABLE
、ALTER TABLE
或LOAD DATA
期間) 允許使用的暫存檔最大大小。如果檔案大小會大於此值,則會改為使用索引快取建立索引,速度會比較慢。該值以位元組為單位。設定損毀
MyISAM
資料表自動復原的模式。設定復原資料表時使用的緩衝區大小。
如果您啟動 mysqld 並設定 myisam_recover_options
系統變數,則會啟用自動復原。在這種情況下,當伺服器開啟 MyISAM
資料表時,它會檢查資料表是否標記為損毀,或資料表的開啟次數變數是否不為 0,並且您正在執行伺服器時停用了外部鎖定。如果符合任一條件,則會發生下列情況
伺服器會檢查資料表是否有錯誤。
如果伺服器發現錯誤,它會嘗試進行快速資料表修復 (使用排序且不重新建立資料檔案)。
如果由於資料檔案中的錯誤 (例如,重複索引鍵錯誤) 而導致修復失敗,則伺服器會再次嘗試,這次會重新建立資料檔案。
如果修復仍然失敗,伺服器會使用舊的修復選項方法再次嘗試一次 (逐列寫入而不排序)。此方法應該能夠修復任何類型的錯誤,而且磁碟空間需求低。
如果復原無法從先前完成的陳述式中復原所有列,而且您未在 myisam_recover_options
系統變數的值中指定 FORCE
,則自動修復會中止並在錯誤記錄中顯示錯誤訊息
Error: Couldn't repair table: test.g00pages
如果您指定 FORCE
,則會改為寫入類似這樣的警告
Warning: Found 344 of 354 rows when repairing ./test/g00pages
如果自動復原值包含 BACKUP
,復原程序會建立名稱格式為
的檔案。您應該有一個 cron 指令碼,自動將這些檔案從資料庫目錄移到備份媒體。tbl_name-datetime
.BAK