参考
- Amazon RDS DB インスタンスに使用する MySQL のパラメータの例外
- 【参考】MySQL 8.0は何が優れていて、どこに注意すべきか。データベース専門家が新機能を徹底解説
- MySQLをインストールしたら、必ず確認すべき10の設定
概要
アプリケーションで利用しているMySQLを5.7から8.0(厳密には8.0.16)に移行しました。その時のパラメタの控えや参考にした情報など。
移行時の留意点
移行で最も手間がかかる(=アプリケーションの改修が必要)のは「クエリキャッシュ機能の廃止」(実際、query_cache_size
パラメタもなくなっていました)のようですが、当方のアプリケーションではもともと使ってなかったので問題なしと判断しました。
移行後に発生したエラー
トップページを表示したらいきなりSQL実行エラーが出て焦りました。
エラーメッセージがgroup by
句近辺と記載されていたので、sql_mode=TRADITIONAL
の意味が変わった?select
句で集計関数使ってないカラムでもあったかな?と思いましたが違いました。
MySQL8.0
の問題というよりアプリ側の不具合。
なんとgroup by
句 で desc
を記載しているクエリがあってエラーになってました。(たぶんorder by
句をコピーして消すの忘れて、動作上も問題なかったので見落とした模様。というか5.7ではgroup by
にdesc
を書いても正常実行できてたんですね・・・。汗)
ちなみにRDS for MySQL
では既存インスタンスのメジャーバージョンアップも実行可能となっています。開発途上のアプリで使っているデータベースで壊れてもいいので、怖いものみたさで実行してみましたが、「パラメタグループがデフォルトでないので駄目!」と怒られて実行できませんでした。(8.0のパラメタを指定すればできたかも?) 。
パラメタ設定
ログ(一般)
パラメタ | 設定値 | 意味 |
---|---|---|
general_log | 1 | 汎用ログの出力(RDSインスタンス作成時も指定できるが念の為) |
log_output | FILE | RDSのディスク消費を抑えるためにTABLE → FILEに |
出力先(general_log_file
)はRDSでは変更不可で以下の値になっていました。
ログ(スロークエリー)
パラメタ | 設定値 | 意味 |
---|---|---|
slow_query_log | 1 | スロークエリーログ出力を有効(これもRDSインスタンス作成時に指定可能 |
log_queries_not_using_indexes | 0 | スロークエリーでログが肥大化するのを防ぐために、インデックスを使用しない(だけの)クエリーを含め「ない」 |
long_query_time | 0.1 | スロークエリーとして扱う時間を10秒から0.1秒に。 |
utf8mb4用の設定
パラメタ | 設定値 | 意味 |
---|---|---|
character_set_client | utf8mb4 | |
character_set_connection | utf8mb4 | |
character_set_database | utf8mb4 | |
character_set_results | utf8mb4 | |
character_set_server | utf8mb4 | |
skip-character-set-client-handshake | 1 | クライアントライブラリからの文字セット指定を無視(意図せぬ文字化け回避) |
init_connect | set names utf8mb4; | 接続開始時にクライアントに文字セットを強制 |
innodb_file_per_table | 1 |
なお、5.7まで指定していた以下の設定は8.0ではなくなっていました。
パラメタ名 | 5.7での設定 | 8.0 |
---|---|---|
innodb_large_prefix | 1(ONの意味) | ON固定 |
innodb_file_format | barracuda | Barracuda固定 |
重要だけど変更しないもの
以下は重要かつRDSでも変更可能なパラメタですが、特に問題ない(というかAWS側で最適に調整)のでそのまま。
パラメタ | 設定値(既定値) | 意味 |
---|---|---|
innodb_buffer_pool_size | {DBInstanceClassMemory*3/4} | データとインデックスがキャッシュされる領域。大きいほど良いが、せっていできる値はもちろん利用できるメモリに依存する。 |
innodb_log_file_size | 134217728 | REDOログサイズ |
max_connections | {DBInstanceClassMemory/12582880} | コネクション数 |
innodb_log_buffer_size | 8388608 | コミットされていないトランザクションのためのバッファのサイズ |
その他
パラメタ | 設定値 |
---|---|
max_allowed_packet | 4194304 ★4MB |
sql_mode | TRADITIONAL |
time_zone | Asia/Tokyo |
参考
RDS管理コンソール上で差分確認した時のスクショ