MySQL 8.0 意識しておきたい 5.xとの違い : デフォルト設定各種
いまごろですが、以前は my.cnf での必須設定だったパラメーターが変わったなーって思ったので、まとめました。
最初 : 5.x って書いたのですが、心のなかで 5.6 あたりと比べてます。 (5.7 運用してなかったので)
Ubuntu 20.04 + MySQL 8.0.23 での経験ベースです。
ver8.0.0 で設定の削除
ver8.0.0 でデフォルトON
innodb_file_per_table=ON
データベース毎にフォルダをきって、DBファイルを配置してくれるパラメーター。
OFFにすれば、以前と同じように、複数のデータベースをかかえていても1ファイル管理に戻せるようです。
Server SQL Modes
sql_mode での動作モード指定が、厳格化 (Strict SQL Mode 化?) されています。
- ONLY_FULL_GROUP_BY
- STRICT_TRANS_TABLES
- NO_ZERO_IN_DATE
- NO_ZERO_DATE
- ERROR_FOR_DIVISION_BY_ZERO
- NO_ENGINE_SUBSTITUTION
MySQL 5.6.6以降では NO_ENGINE_SUBSTITUTION のみがOnで、それより前は、モード指定は空だったとのこと。
実際、5.5時代のDBを8.0持ってきた時に、実装不足がありハマりました。
(迷ったのですが On になったと考えてもいいかと思って、ここに分類)
ver8.0.0 でのデフォルト値の変更点
expire_logs_days
binlog_expire_logs_seconds パラメーターの導入により、Deprecated なパラメーターになってます。
以前は設定しないと無制限だったのが、デフォルトは 30日になりました。
これは binlog_expire_logs_seconds のデフォルト値 (2592000秒 = 30日) を受けてのようです。
文字セット と 照合順序
MySQL サーバー文字セット : utf8mb4 、照合順序 : utf8mb4_0900_ai_ci がデフォルトとなりました。
マルチバイト文字使いの日本人には嬉しい変更と思います。
bin (バイナリ) を使いたい場合には、引き続き設定が必要ですね。
なお utf8 は utf8mb3 (3バイトのUTF8) で指定は非推奨とあったので、古いデータベースからの移行などでは注意が必要そう。
ver8.0.0 で追加されてたパラメーター
その他
確認方法
その他
身近に目にするものだけなので、まだまだあるんでしょうが。
Booleanな設定パラメーターは On でも False でも 0 でも受け付けてくれるのですね。
大体のネタ元は、リリースノート。
順番からいうと、あれ?と気づいてリリースノートを探りにいったという感じです。