top
Loading...
7.6.1.2.在Unix平臺上使用表的符號鏈接
7.6.1.2. 在Unix平臺上使用表的符號鏈接
 

你不應在沒有完全可操作的realpath()調用的系統中對表進行符號鏈接。(LinuxSolaris支持realpath())。可以通過發出一個SHOW VARIABLES LIKE 'have_symlink'語句,檢查系統是否支持符號鏈接。

只有MyISAM表完全支持符號鏈接。對于其它表類型,如果試圖在操作系統中的文件上用前面的任何語句使用符號鏈接,可能會出現奇怪的問題。

對于MyISAM表的符號鏈接的處理如下:

·         在數據目錄指,一定會有表定義文件、數據文件和索引文件。數據文件和索引文件可以移到別處和在數據目錄中符號鏈接替代。表定義文件不能進行符號鏈接替換。

·         可以分別通過符號鏈接將數據文件和索引文件指到不同的目錄。

·         如果mysqld沒有運行,符號鏈接可以從服務器命令行使用ln -s手動完成。同樣,通過使用DATA DIRECTORYINDEX DIRECTORY選項創建表,你可以指示運行的MySQL服務器執行符號鏈接。參見13.1.5節,“CREATE TABLE語法”。

·         myisamchk不用數據文件或索引文件替換符號鏈接。它直接工作在符號鏈接指向的文件。任何臨時文件創建在數據文件或索引文件所處的目錄中。

·         注釋:當你刪掉一個表時,如果該表使用了符號鏈接,符號鏈接和該符號鏈接指向的文件都被刪除掉。這就是你不應以系統root用戶運行mysqld或允許系統用戶對MySQL數據庫目錄有寫訪問權限的原因。

·         如果你用ALTER TABLE ... RENAME重命名一個表并且不將表移到另一個數據庫,數據庫目錄中的符號鏈接被重新命名為一個新名字并且數據文件和索引文件也相應地重新命名。

·         如果你用ALTER TABLE ... RENAME移動一個表到另一個數據庫,表移動到另一個數據庫目錄。舊的符號鏈接和其所指向的文件被刪除。換句話說,新表不再被鏈接。

·         如果不使用符號鏈接,你應對mysqld使用--skip-symbolic-links選項以確保沒有人能夠使用mysqld來刪除或重新命名數據目錄之外的文件。

表符號鏈接還不支持以下操作:

·         ALTER TABLE忽略DATA DIRECTORY INDEX DIRECTORY表選項。

·         BACKUP TABLE RESTORE TABLE不考慮符號鏈接。

·         .frm文件必須絕不能是一個符號鏈接(如前面所述,只有數據和索引文件可以是符號鏈接)。如果試圖這樣做(例如,生成符號鏈接)會產生不正確的結果。假定你在MySQL數據目錄下有一個數據庫db1,該數據庫有一個表tbl1,并且在db1目錄中你制作了一個符號鏈接tbl2指向tbl1

·                shell> cd /path/to/datadir/db1
·                shell> ln -s tbl1.frm tbl2.frm
·                shell> ln -s tbl1.MYD tbl2.MYD
·                shell> ln -s tbl1.MYI tbl2.MYI

如果一個線程讀取db1.tbl1同時另一個線程更新 db1.tbl2會發生問題:

o        查詢緩存將變為“傻瓜” (它沒有辦法知道tbl1是否被更新,因此它返回過時的結果)

o        tbl2上的ALTER語句也會失敗。

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