Mysql

innodb_large_prefix 和 innodb_file_format 設置是否向後兼容?

  • April 4, 2019

當我嘗試通過命令行安裝軟體時收到以下消息。我使用一個 mySQL 數據庫。

* innodb_large_prefix = ON  is required.
* innodb_file_format = Barracuda is required.

我有幾個問題,僅通過 Google 搜尋無法找到答案:

  • 我可以將這些更改為所需的設置而不破壞伺服器的其他軟體嗎?
  • 假設它確實壞了,我可以切換回來嗎?
  • 在更改之前我需要檢查我的 mySQL 數據庫版本嗎?

首先,永遠不要相信一個隨機的網際網路人告訴你你的環境;唯一可以確定的方法是進行自己的測試。在不了解您環境的所有細節的情況下,很難給出絕對正確的答案。

廣泛回答您的問題**“啟用梭子魚和 是否安全large_prefix_index?” 答案是肯定的,它是安全且向後兼容的。**

barracuda是一種新的文件格式,它允許 2 種額外的行格式:DynamicCompressed. 通常,內部行格式對應用程序是透明的,儘管一些新功能可能需要新格式(large_prefix_index和優化的 blob 儲存)。這兩個功能在最新的 MySQL 和 MariaDB 版本上預設啟用,這通常只發生在成熟和向後兼容的選項中。在我個人看來,沒有理由在最新的伺服器版本上使用傳統格式,除非你維護的是舊的安裝。

請注意,舊數據不會自動轉換為新格式,這就是為什麼如果出現問題,您可以返回舊選項而不會發生任何變化。要利用新格式,您需要創建新表或在選項更改後重建這些表(它們只是“預設值”,它們不會自動更改表上的任何內容)。

特別是,large_prefix_index允許更大的索引,這通常是實現完全 UTF-8 兼容性所必需的。特別是,我看到許多應用程序失敗,因為它們需要utf8mb4字元集,每個字元最多需要 4 個字節,並且不啟用該選項會導致表創建失敗。這很可能是你的情況。

“我需要在更改之前檢查我的 mySQL 數據庫版本嗎?” 確實如此,舊版本的 MySQL/MariaDB 不支持該選項。較新的版本沒有可用的選項(因此如果提供此類選項,它們可能無法啟動),因為該選項被硬編碼為新值。一般來說,MySQL 支持較舊的格式,但mysql_upgrade如果認為它們不兼容,則會在執行時警告您重新建構它們。

有沒有可能失敗的場景?-我可以看到它在非常特定的場景中失敗,其中預期redundantcompact行格式,但這些應該很少見-在我看來,所有維護的應用程序都應該與梭子魚/壓縮行格式兼容Antelope通常不推薦使用文件格式)。如果您有需要非常特殊的 mysql 配置的遺留應用程序,請考慮保留較舊的 mysql 安裝或不將表重建為新格式,但我認為這是一個巨大的技術債務,而不是最佳實踐。

引用自:https://dba.stackexchange.com/questions/233751