MySQL數據庫的數據目錄位置,包括目錄裡的各種文件的位置)可根據實際情況進行調整。調整的方法有兩種,一種是使用符號鏈接;一種用服務器啟動選項。
下面一個列表說明了數據目錄及目錄中文件各自適宜采用的方法:
Table 3.2. MySQL數據目錄及目錄中文件位置的調整方法
調整對象 適用方法
整個數據目錄 啟動選項和符號鏈接
數據庫目錄 符號鏈接
數據表 符號鏈接
InnoDB數據表空間 啟動選項
PID文件 啟動選項
日志文件 啟動選項
下面是各種調整方法的具體操作過程:
在調整MySQL的數據目錄時,要先停止服務器,再把數據目錄移動到新的位置。接著,我們可選擇在原來目錄下創建一個符號鏈接指向新的位置,或者用啟動選擇--datadir指向新的數據目錄。推薦用創建符號鏈接的方法,因為如果那個數據目錄中有my.cnf文件,相應的服務器還能找到它。
數據庫只能存在於MySQL數據目錄中,所以只能使用符號鏈接的方法調整它的位置。在Linux系統的操作步驟如:
關閉服務器;
把數據庫目錄拷貝到新的位置;
刪除原來的數據庫目錄;
在原來的MySQL數據目錄中創建一個同名符號鏈接指向新的位置;
重新啟動服務器。
在Windows下的操作方法不些不同,操作方法如下:
關閉服務器;
把數據庫目錄移動新的位置;
刪除原來的數據庫目錄;
在原來數據目錄下建一個同名的.sym文件,在文件中輸入數據庫新目錄的全路徑,如c:\MySQL\newdir\mydb。這個文件就相當於Linux下的符號鏈接;
重啟服務器。
為了支持符號鏈接功能,必須用--use-symbolic-links選項啟動服務器;或在選項文件的[MySQLd]節中添加use-symbolic-links選項。
MySQL必須是3.23.16以上版本且是max服務器(mysqld-max或MySQLd-max-nt)。
要移動數據表,必須滿足以下所有條件才行:
MySQL的版本必須是4.0或以上的版本;
操作系統必須有一個可用的realpath()調用;
移動的數據表必須是MyISAM類型的數據表。
在滿足以上所有條件後,我們就可把.MYD數據文件和MYI索引文件移到新位置,再在原來位置創建兩個同名符號鏈接指定新的位置。注意,.frm定義文件仍需留在原來的數據庫目錄中。
如以上條件不能全部滿足,最好不要移動數據表文件。否則一旦你運行ALTER TABLE、OPTIMIZE TABLE、REPAIR TABLE語句對移動過的數據表進行優化或修改,這樣數據表就會回到原來的位置,使移動操作失效。因為這些命令的執行過程是這樣的:它會先在數據目錄中創建一個臨時數據表並對這個臨時數據表進行優化或修改,然後刪除原來的數據表(這裡是你為了移動數據表而創建的一個符號鏈接),再把臨時數據表更名為原來的數據表名稱。這樣一來,你移走的數據表就和這個數據庫完全沒有關系了。基於以下的不穩定因素,如無特殊必要,不建議移動數據表。
InnoDB表空間是通過在選項文件中使用innodb_data_home_dir和innodb_data_file_path選項列出InnoDB表空間組成文件清單的方法來配置的,所以我們可通過修改這些選項來重新安置InnoDB表空間的組成文件。步驟如下:
關閉服務器;
移動組成表空間的文件;
修改選項文件,指出組成表空間的文件的新位置;
重啟服務器。
狀態文件和日志文件的位置可通過選項文件或啟動服務器時指定。