您可以透過在伺服器啟動時啟用 --innodb-read-only
設定選項,來查詢 MySQL 資料目錄位於唯讀媒體上的 InnoDB
資料表。
如何啟用
若要準備一個執行個體進行唯讀操作,請確保在將其儲存到唯讀媒體上之前,將所有必要資訊刷新到資料檔案中。執行伺服器時停用變更緩衝區 (innodb_change_buffering=0
) 並執行慢速關機。
若要為整個 MySQL 執行個體啟用唯讀模式,請在伺服器啟動時指定下列設定選項
如果執行個體位於唯讀媒體 (例如 DVD 或 CD) 上,或
/var
目錄並非所有人都可寫入:--pid-file=
和path_on_writeable_media
--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 9.0 中,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
配置選項的任何設定。