6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RDS for MySQL8.0のパラメタ設定(ログ, sql_mode, utf8mb4など)

Last updated at Posted at 2019-12-27

参考

概要

アプリケーションで利用している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 bydescを書いても正常実行できてたんですね・・・。汗)

ちなみに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管理コンソール上で差分確認した時のスクショ

Image from Gyazo

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?