web-dev-qa-db-ja.com

innodb_large_prefixおよびinnodb_file_format設定には下位互換性がありますか?

コマンドラインからソフトウェアをインストールしようとすると、次のメッセージが表示されました。私はmySQL dbを使用します。

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

Googleを検索しただけでは答えが見つからない質問がいくつかあります:

  • サーバーの他のソフトウェアを壊すことなく、これらを必要な設定に変更できますか?
  • 壊れたとしたら、元に戻すことはできますか?
  • これを変更する前にmySQL dbバージョンを確認する必要がありますか?
3
Akif

まず第一に、ランダムなインターネット担当者があなたの環境についてあなたに言うことを決して信用しないでください。 確認する唯一の方法は、独自のテストを行うことです。環境の詳細をすべて知らずに、完全に正しい答えを出すことは非常に困難です。

質問に広く答える"バラクーダとlarge_prefix_indexを有効にしても安全ですか?"答えは「はい」です。安全で、下位互換性があります。

barracudaは、DynamicおよびCompressedの2つの追加行フォーマットを許可する新しいファイルフォーマットです。一般に、内部行形式はアプリケーションに対して透過的ですが、一部の新機能では新しい形式(large_prefix_indexおよび最適化されたblobストレージ)が必要になる場合があります。 MySQLとMariaDBの最新バージョンでは、これらの機能の両方がデフォルトで有効になっています。これは通常、成熟した下位互換性のあるオプションでのみ発生します。私の個人的な意見では、古いインストールを維持しているのでない限り、最新のサーバーバージョンでレガシーフォーマットを使用する理由はありません。

古いデータは自動的に新しい形式に変換されないことに注意してください。そのため、何か問題がある場合は古いオプションに戻るだけで、何も変更されません。新しい形式を利用するには、新しいテーブルを作成するか、オプションを変更した後にテーブルを再構築する必要があります(これらは単なる「デフォルト」であり、テーブルの内容は自動的に変更されません)。

特に、large_prefix_indexはより大きなインデックスを可能にします通常、完全なUTF-8互換性を可能にするために必要です。特に、utf8mb4文字セットが必要で、1文字あたり最大4バイトを必要とするため、多くのアプリケーションが失敗し、そのオプションを有効にしないと、テーブルの作成が失敗します。それはおそらくあなたのケースです。

"これを変更する前にmySQL dbバージョンを確認する必要がありますか?"確かに、古いバージョンのMySQL/MariaDBはそのオプションをサポートしていません。オプションは新しい値にハードコーディングされているため、新しいバージョンでは使用可能なオプションがありません(そのようなオプションが提供されていると、起動できない場合があります)。一般に、MySQLは古い形式をサポートしていますが、互換性がないと見なされた場合、mysql_upgradeの実行時に再構築するように警告します。

それが失敗する可能性のあるシナリオはありますか?-redundantまたはcompact行形式が予期されている非常に特定のシナリオで失敗することがわかりますが、それらはまれであるはずです-in私の意見では、維持されるすべてのアプリケーションはバラクーダ/圧縮行形式と互換性があるはずですAntelopeとファイル形式は一般的に非推奨です)。非常に特別なmysql構成を必要とするレガシーアプリケーションがある場合は、古いmysqlインストールを維持するか、テーブルを新しい形式に再構築しないことを検討してください。ただし、技術的な負担が大きく、ベストプラクティスではないと考えます。

3
jynus