RDS for MySQLのlower_case_table_namesはDBインスタンス作成時に指定が必要
こんにちは!コンサル部のinomaso(@inomasosan)です。
RDS for MySQLのlower_case_table_names
というパラメータはDBインスタンス作成後に変更不可であり、結果としてDBインスタンスの再作成が必要となったので、備忘としてブログにまとめていきます。
[2022/4/14追記]本件はRDS特有の制約ではなく、MySQLエンジンの仕様となります。MySQLのリファレンスマニュアルに「lower_case_table_names は、サーバーの初期化時にのみ構成できます。 サーバーの初期化後の lower_case_table_names 設定の変更は禁止されています」と記載されております。
lower_case_table_namesって何?
MySQLのデータベース名やテーブル名を大文字小文字で区別するかどうかのパラメータとなります。
OSのファイル名の扱いに準拠するようなので、デフォルト値はOSによって異なります。
OS | デフォルト値 |
---|---|
Unix | 0 |
Windows | 1 |
macOS | 2 |
ここからが本題なのですが、RDS for MySQLの場合はlower_case_table_namesのデフォルト値は0となります。
そのためデフォルトは大文字と小文字が区別されるというわけです。
アプリ要件等で名前は小文字で保存し、大文字小文字を区別したくない場合は、AWS公式ドキュメントにある通り、DBインスタンス作成時にlower_case_table_names
の値を設定する必要があります。
DB インスタンスを作成する前に、カスタム DB パラメータグループに lower_case_table_names パラメータを設定します。その後、DB インスタンスを作成する際にカスタム DB パラメータグループを指定します。
また、全バージョンでサポートされているわけではないため、2022/4/12時点では、以下のような前提事項があります。
lower_case_table_namesの値 | サポートバージョン |
---|---|
0 | 全バージョン |
1 | 5.6、5.7 8.0.19 および 8.0 以降 |
尚、DBパラメータグループが8.0より前のバージョンのMySQL DBインスタンスに関連付けられている場合、lower_case_table_names のパラメータ変更は非推奨となります。
AWS公式ドキュメントにある通り、バックアップやリードレプリカに影響が出る可能性があります。
ポイントインタイムリカバリのバックアップとリードレプリカの DB インスタンスで不整合が生じることがあるためです。
他にもいくつか考慮事項がございますので、詳細については以下リンク先をご参照願います。
本当に変更不可なのか試してみた
DBインスタンス作成後にlower_case_table_names
が変更できないか試してみました。
DBインスタンスに関連付けたDBパラメータグループから変更
DBインスタンスに関連づけられている、既存のカスタムDBパラメータグループから、該当のパラメータ変更を試みました。
しかし、保存中のエラーとなり変更できませんでした。
別のDBパラメータグループに変更
DBパラメータグループ自体を変更すれば、ワンチャンあるかなと思い、lower_case_table_names
の値を設定した別のDBパラメータグループへ変更しようとしましたが、エラーとなってしまいました。
参考URL
まとめ
RDSで変更が必要なパラメータは後で対応すればいいかなという認識だったので、今回の件は良い薬になりました。
この記事が、どなたかのお役に立てば幸いです。それでは!