top
Loading...
5.9.5.myisamchk:MyISAM表維護實用工具
5.9.5. myisamchk:MyISAM表維護實用工具
5.9.5.1. 用于myisamchk的一般選
5.9.5.2. 用于myisamchk的檢查選項
5.9.5.3. myisamchk的修復選項
5.9.5.4. 用于myisamchk的其它選項
5.9.5.5. myisamchk內存使用
5.9.5.6. 將myisamchk用于崩潰恢
5.9.5.7. 如何檢查MyISAM表的錯誤
5.9.5.8. 如何修復表
5.9.5.9. 表優化

可以使用myisamchk實用程序來獲得有關數據庫表的信息或檢查、修復、優化他們。myisamchk適用MyISAM(對應.MYI.MYD文件的表)

調用myisamchk的方法:

shell> myisamchk [options] tbl_name ...

options指定你想讓myisamchk做什么。在后面描述它們。還可以通過調用myisamchk --help得到選項列表。

tbl_name是你想要檢查或修復的數據庫表。如果你不在數據庫目錄的某處運行myisamchk,你必須指定數據庫目錄的路徑,因為myisamchk不知道你的數據庫位于哪兒。實際上,myisamchk不在乎你正在操作的文件是否位于一個數據庫目錄;你可以將對應于數據庫表的文件拷貝到別處并且在那里執行恢復操作。

如果你愿意,可以用myisamchk命令行命名幾個表。還可以通過命名索引文件( .MYI后綴)來指定一個表。它允許你通過使用模式*.MYI指定在一個目錄所有的表。例如,如果你在數據庫目錄,可以這樣在目錄下檢查所有的MyISAM表:

shell> myisamchk *.MYI

如果你不在數據庫目錄下,可通過指定到目錄的路徑檢查所有在那里的表:

shell> myisamchk /path/to/database_dir/*.MYI

你甚至可以通過為MySQL數據目錄的路徑指定一個通配符來檢查所有的數據庫中的所有表:

shell> myisamchk /path/to/datadir/*/*.MYI

推薦的快速檢查所有MyISAM表的方式是:

shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI

如果你想要檢查所有MyISAM表并修復任何破壞的表,可以使用下面的命令:

shell> myisamchk --silent --force --fast --update-state 
          -O key_buffer=64M -O sort_buffer=64M 
          -O read_buffer=1M -O write_buffer=1M 
          /path/to/datadir/*/*.MYI

該命令假定你有大于64MB的自由內存。關于用myisamchk分配內存的詳細信息,參見5.9.5.5節,“myisamchk內存使用”。

當你運行myisamchk時,必須確保其它程序不使用表。否則,當你運行myisamchk時,會顯示下面的錯誤消息:

warning: clients are using or haven't closed the table properly

這說明你正嘗試檢查正被另一個還沒有關閉文件或已經終止而沒有正確地關閉文件的程序(例如mysqld服務器)更新的表。

如果mysqld正在運行,你必須通過FLUSH TABLES強制清空仍然在內存中的任何表修改。當你運行myisamchk時,必須確保其它程序不使用表。避免該問題的最容易的方法是使用CHECK TABLE而不用myisamchk來檢查表。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
北斗有巢氏 有巢氏北斗