innodb_directories
變數,其定義在啟動時掃描表空間檔案的目錄,支援在伺服器離線時將表空間檔案移動或還原至新位置。在啟動期間,會使用掃描發現的表空間檔案來取代資料字典中參考的檔案,並更新資料字典以參考重新定位的檔案。如果掃描發現重複的表空間檔案,則啟動會失敗,並顯示錯誤,指出為相同的表空間 ID 找到多個檔案。
由 innodb_data_home_dir
、innodb_undo_directory
和 datadir
變數定義的目錄會自動附加到 innodb_directories
引數值。無論是否明確指定 innodb_directories
設定,都會在啟動時掃描這些目錄。這些目錄的隱式新增允許移動系統表空間檔案、資料目錄或復原表空間檔案,而無需配置 innodb_directories
設定。但是,當目錄變更時,必須更新設定。例如,在重新定位資料目錄之後,您必須在重新啟動伺服器之前更新 --datadir
設定。
innodb_directories
變數可以在啟動命令或 MySQL 選項檔案中指定。引數值會使用引號括起來,因為分號 (;) 會被某些命令解譯器解譯為特殊字元。(例如,Unix shell 會將其視為命令終止符。)
啟動命令
mysqld --innodb-directories="directory_path_1;directory_path_2"
MySQL 選項檔案
[mysqld]
innodb_directories="directory_path_1;directory_path_2"
以下程序適用於移動個別每表一個檔案和一般表空間檔案、系統表空間檔案、復原表空間檔案或資料目錄。在移動檔案或目錄之前,請檢閱後續的使用說明。
停止伺服器。
將表空間檔案或目錄移動到所需位置。
讓
InnoDB
知道新的目錄。如果移動個別每表一個檔案或一般表空間檔案,請將未知目錄新增至
innodb_directories
值。由
innodb_data_home_dir
、innodb_undo_directory
和datadir
變數定義的目錄會自動附加到innodb_directories
引數值,因此您無需指定這些。每表一個檔案的表空間檔案只能移動到與綱要名稱相同的目錄。例如,如果
actor
資料表屬於sakila
綱要,則actor.ibd
資料檔案只能移動到名為sakila
的目錄。一般表格空間檔案無法移動到資料目錄或資料目錄的子目錄中。
如果移動系統表格空間檔案、還原表格空間或資料目錄,請視需要更新
innodb_data_home_dir
、innodb_undo_directory
和datadir
設定。
重新啟動伺服器。
使用注意事項
萬用字元運算式不能在
innodb_directories
引數值中使用。innodb_directories
掃描也會遍歷指定目錄的子目錄。重複的目錄和子目錄會從要掃描的目錄列表中捨棄。innodb_directories
支援移動InnoDB
表格空間檔案。不支援移動屬於InnoDB
以外的儲存引擎的檔案。當移動整個資料目錄時,此限制也適用。innodb_directories
支援將檔案移動到掃描的目錄時,重新命名表格空間檔案。它也支援將表格空間檔案移動到其他支援的作業系統。將表格空間檔案移動到不同的作業系統時,請確保表格空間檔案名稱不包含目的地系統上禁止的字元或具有特殊含義的字元。
當將資料目錄從 Windows 作業系統移動到 Linux 作業系統時,請修改二進位日誌索引檔案中的二進位日誌檔案路徑,以使用反斜線而不是正斜線。預設情況下,二進位日誌索引檔案與二進位日誌檔案具有相同的基本名稱,副檔名為 '
.index
'。二進位日誌索引檔案的位置由--log-bin
定義。預設位置是資料目錄。如果將表格空間檔案移動到不同的作業系統會引入跨平台複製,則資料庫管理員有責任確保正確複製包含平台特定目錄的 DDL 陳述式。允許指定目錄的陳述式包括
CREATE TABLE ... DATA DIRECTORY
和CREATE TABLESPACE ... ADD DATAFILE
。將以絕對路徑建立或位於資料目錄之外的位置的每個表格檔案和一般表格空間的目錄新增至
innodb_directories
設定中。否則,InnoDB
將無法在還原期間找到這些檔案。有關相關資訊,請參閱 表格空間在當機還原期間的探索。若要檢視表格空間檔案位置,請查詢資訊綱要
FILES
表格。mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES \G