您可以透過在伺服器啟動時啟用 --innodb-read-only
配置選項,來查詢 MySQL 資料目錄位於唯讀媒體上的 InnoDB
資料表。
如何啟用
若要準備執行個體以進行唯讀操作,請確保所有必要的資訊在儲存到唯讀媒體之前都已 刷新 到資料檔案。請使用停用變更緩衝 (innodb_change_buffering=0
) 來執行伺服器,並進行慢速關機。
若要為整個 MySQL 執行個體啟用唯讀模式,請在伺服器啟動時指定下列配置選項
如果執行個體位於唯讀媒體(例如 DVD 或 CD)上,或者
/var
目錄並非所有人皆可寫入:--pid-file=
和writeable_media_path
--event-scheduler=disabled
--innodb-temp-data-file-path
。此選項指定InnoDB
暫時表格空間資料檔案的路徑、檔案名稱和檔案大小。預設設定為ibtmp1:12M:autoextend
,這會在資料目錄中建立ibtmp1
暫時表格空間資料檔案。若要準備執行個體以進行唯讀操作,請將innodb_temp_data_file_path
設定為資料目錄之外的位置。路徑必須相對於資料目錄。例如--innodb-temp-data-file-path=../../../tmp/ibtmp1:12M:autoextend
啟用 innodb_read_only
會阻止所有儲存引擎的資料表建立和捨棄操作。這些操作會修改 mysql
系統資料庫中的資料字典資料表,但這些資料表使用 InnoDB
儲存引擎,且在啟用 innodb_read_only
時無法修改。相同的限制適用於修改資料字典資料表的任何操作,例如 ANALYZE TABLE
和 ALTER TABLE
。tbl_name
ENGINE=engine_name
此外,在 MySQL 8.4 中,mysql
系統資料庫中的其他表格也使用 InnoDB
儲存引擎。將這些表格設為唯讀會導致修改它們的操作受到限制。例如,在唯讀模式下不允許執行 CREATE USER
、GRANT
、REVOKE
和 INSTALL PLUGIN
等操作。
使用情境
此操作模式適用於以下情況:
在唯讀儲存媒體(例如 DVD 或 CD)上發佈 MySQL 應用程式或一組 MySQL 資料。
多個 MySQL 實例同時查詢相同的資料目錄,通常用於資料倉儲配置。您可以使用此技術來避免在高負載 MySQL 實例中可能發生的瓶頸,或者您可以使用不同的配置選項來調整每個實例以適應特定類型的查詢。
查詢已為安全性或資料完整性原因而設為唯讀狀態的資料,例如已封存的備份資料。
此功能主要旨在提高發布和部署的靈活性,而不是基於唯讀方面的原始效能。請參閱第 10.5.3 節,「最佳化 InnoDB 唯讀交易」,瞭解如何調整唯讀查詢的效能,這不需要將整個伺服器設為唯讀。
運作方式
當伺服器透過 --innodb-read-only
選項以唯讀模式執行時,某些 InnoDB
功能和元件會被減少或完全關閉。
不會執行變更緩衝,特別是不會從變更緩衝區執行合併。為了確保在您準備將實例用於唯讀操作時變更緩衝區為空,請停用變更緩衝 (
innodb_change_buffering=0
) 並首先執行慢速關閉。由於重做日誌不會在唯讀操作中使用,因此您可以在將實例設為唯讀之前,將
innodb_log_file_size
設定為可能的最小值 (1 MB)。大多數背景執行緒都會被關閉。I/O 讀取執行緒、I/O 寫入執行緒以及用於寫入臨時檔案的頁面刷新協調器執行緒仍會保留,這些執行緒在唯讀模式下是允許的。緩衝池調整大小執行緒也保持活動狀態,以啟用緩衝池的線上調整大小。
關於死鎖、監視器輸出等資訊不會寫入臨時檔案。因此,
SHOW ENGINE INNODB STATUS
不會產生任何輸出。在伺服器處於唯讀模式時,對通常會變更寫入操作行為的組態選項設定所做的變更不會生效。
不會使用復原日誌。請停用
innodb_undo_tablespaces
和innodb_undo_directory
組態選項的任何設定。