我正在研究一個腳本,它將是一個cronjob,它將查看數據庫中的表並修復任何需要它的表。他們是MySQL數據庫中的myisam表。我的問題是,是否有任何理由在命令行上使用myisamchk
語法與REPAIR TABLE
查詢語法?修復MySQL myisam表使用`修復表'vs myisamchk
在一個MyISAM文檔頁面, http://dev.mysql.com/doc/refman/5.0/en/myisamchk.html, 他們提供了這樣的一種方式來修復需要
myisamchk --silent --force --fast --update-state \
--key_buffer_size=64M --sort_buffer_size=64M \
--read_buffer_size=1M --write_buffer_size=1M \
/path/to/datadir/*/*.MYI
就會有不同的結果比使用
REPAIR TABLE tablename
在我所有的桌子上?我會用php編程方式做到這一點,並用類似的信息(僞)
$tables=query("SELECT table from information_schema.tables where table_schema='myDBName'");
foreach($tables as $table)
{
$result=query("REPAIR TABLE ".$table);
}
儘管做下去的一種方式或其他的實用性任何意見結束,但將實際最終的結果會有所不同?謝謝。
如果需要,我可以提供工作(非僞)php代碼,但我不認爲這是必要的。我使用僞代碼的原因是,在工作中我們使用我們自己的包裝器來訪問數據庫。
那麼你是說唯一的區別是我應該只在服務器離線時使用myisamchk? – chiliNUT
這是主要的區別,儘管myisamchk有更多的選擇。你也可以找到源代碼。或者,您可以將表格文件複製到其他地方,修復它,然後使用myisamchk將修復後的版本複製回來,無論何時使用'FLUSH TABLES WITH讀鎖定「。 –
謝謝。除了其他原因,我想用sql語法來做,所以我可以在連接到我的數據庫服務器而不是服務器本身的另一臺服務器上運行代碼。我用檢查表記錄狀態,然後根據需要修復。 – chiliNUT