ひでメモ

プログラムについて勉強したことを書きます。たぶん。

【MySQL】5.6 => 5.7 のアップデートでチェックした設定

以前下記の記事で MySQL のアップデート手順について書きました。
natsuhide.hatenablog.com

その際、アップデート後に注意すべきパラメータについてもいくつかチェックしたので覚書きです。

MySQL のバージョンは 5.7.36 です。

注意

強制で 5.7 へのアップデートを余儀なくされ、割ける工数もなく、今後成長する見込みもないがサービスとしては引き続き稼働しないといけない、という限られた状態で最低限見直した設定です。
これを期にパフォーマンスを上げるぜ!とか変なデータが入らないようにDBでも制約を入れよう!というポジティブな話ではないのでそういう方は回れ右です…!

sql_mode

5.6 のデフォルトはNO_ENGINE_SUBSTITUTIONですが 5.7 では変わってしまいます。
my.cnf で明示的に指定するようにしました。

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

5.7 のデフォルトで具体的にどのようなエラーになるかは省きますが、日付型の月日に 0 が入る場合にエラーになるなどそこはエラーにすべきでしょというところがエラーになるようにはなっているようです。

internal_tmp_disk_storage_engine

メモリに収まらなかった場合にストレージを使用してクエリを処理する仮想メモリのような機能があるようです。
その機能を使う際のストレージエンジンの指定です。

5.7 で新規に作られた変数ですが、5.6 では同様の機能を使う際のストレージエンジンが MyISAMInnoDB になっています。
性能的には InnoDB のほうが良いそうなのですが1つ問題があるそうです。
InnoDB かつ 5.7 のデフォルト設定では、仮想メモリ的に使われる一時テーブルが解放されずどんどんディスクを食いつぶしていきディスクが満杯になる、ということがあるとのこと。

日々の覚書: MySQL 5.7.6以降では暗黙のテンポラリーテーブルがあふれると死ぬ

恐ろしいので 5.6 と同じ MyISAM を my.cnf で設定しました。(性能的にも現状問題はないので)

[mysqld]
internal_tmp_disk_storage_engine = MyISAM

default_password_lifetime

ユーザのパスワード変更を求められる日数です。(前回変更してからN日後に再度変更を求められる) 特定のバージョン以下だとデフォルトで1年ほどが設定されており、時限爆弾的に突然DBへアクセスができなくなるそうです(怖い) 5.7 の最新バージョンでは 0(無期限)にデフォルト値が設定されているので特に変更はしていません。

参考

めちゃくちゃ参考になりました。ありがとうございます…!
MySQL 5.7にやられないためにおぼえておいてほしいこと