AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

MySQL 8.0 意識しておきたい 5.xとの違い : デフォルト設定各種

いまごろですが、以前は my.cnf での必須設定だったパラメーターが変わったなーって思ったので、まとめました。

最初 : 5.x って書いたのですが、心のなかで 5.6 あたりと比べてます。 (5.7 運用してなかったので)

Ubuntu 20.04 + MySQL 8.0.23 での経験ベースです。

ver8.0.0 で設定の削除

innodb_file_format=BARRACUDA

InnoDBテーブルのチューニング記事等にでてくるパラメーター。

v8では、Barracuda 形式固定になってるので、設定自体が削除されてました。

※なお以前は Antelope がデフォルトでした

innodb_large_prefix=ON

InnoDBテーブルのチューニング記事等にでてくるパラメーター。

Barracudaの設定と一緒に指定していたもの。

Barracuda形式固定に伴い、常にTrueとなったようで、設定自体も削除されてます。

ver8.0.0 でデフォルトON

log_bin=ON

DBリカバリ時のPTRや、レプリケーションに使うバイナリログを出力するパラメーター。

以前は、デフォルトOFFでした。

innodb_file_per_table=ON

データベース毎にフォルダをきって、DBファイルを配置してくれるパラメーター。

OFFにすれば、以前と同じように、複数のデータベースをかかえていても1ファイル管理に戻せるようです。

Server SQL Modes

sql_mode での動作モード指定が、厳格化 (Strict SQL Mode 化?) されています。

MySQL 8.0 のデフォルト SQL モード

  • 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 で追加されてたパラメーター

innodb_default_row_format=DYNAMIC

5.7.xから?かな。

Barracudaが基本になったので、Dynamicが基本となってるようです(わかりやすくていいと思う)

以前の COMPACT や REDUNDANT も選択が可能。

同様に Barracudaで使える COMPRESSED (圧縮) は システムテーブルに適用できないので、このパラメーターでは指定が不可との事


ROW_FORMAT はテーブル単位指定できるので、COMPRESSDかけたい時は、(たぶん)個別に設定となるのでしょうね。


その他

確認方法

  • グローバル変数の確認
    • SHOW GLOBAL VARIABLES;
    • SHOW GLOBAL VARIABLES LIKE '%innodb_%'\G
  • テーブル設定の確認
    • SHOW TABLE STATUS\G

その他

身近に目にするものだけなので、まだまだあるんでしょうが。


Booleanな設定パラメーターは On でも False でも 0 でも受け付けてくれるのですね。


大体のネタ元は、リリースノート。

順番からいうと、あれ?と気づいてリリースノートを探りにいったという感じです。

dev.mysql.com