文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  設定 InnoDB 為唯讀模式

17.8.2 設定 InnoDB 為唯讀模式

您可以透過在伺服器啟動時啟用 --innodb-read-only 設定選項,來查詢 MySQL 資料目錄位於唯讀媒體上的 InnoDB 資料表。

如何啟用

若要準備一個執行個體進行唯讀操作,請確保在將其儲存到唯讀媒體上之前,將所有必要資訊刷新到資料檔案中。執行伺服器時停用變更緩衝區 (innodb_change_buffering=0) 並執行慢速關機

若要為整個 MySQL 執行個體啟用唯讀模式,請在伺服器啟動時指定下列設定選項

啟用 innodb_read_only 可防止所有儲存引擎建立和刪除資料表的操作。這些操作會修改 mysql 系統資料庫中的資料字典資料表,但是這些資料表使用 InnoDB 儲存引擎,並且在啟用 innodb_read_only 時無法修改。相同的限制也適用於修改資料字典資料表的任何操作,例如 ANALYZE TABLEALTER TABLE tbl_name ENGINE=engine_name

此外,在 MySQL 9.0 中,mysql 系統資料庫中的其他資料表也使用 InnoDB 儲存引擎。將這些資料表設為唯讀會限制修改它們的操作。例如,在唯讀模式下,不允許執行 CREATE USERGRANTREVOKEINSTALL 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 不會產生任何輸出。

  • 當伺服器處於唯讀模式時,通常會改變寫入操作行為的配置選項設定變更不會生效。

  • 為了強制執行隔離等級MVCC 處理會被關閉。所有查詢都會讀取記錄的最新版本,因為不可能進行更新和刪除操作。

  • 不使用復原日誌。請停用 innodb_undo_tablespacesinnodb_undo_directory 配置選項的任何設定。