BLOGTIMES
2019/06/07

CentOS7 の MariaDB を 10.3 にアップデートする

  mysql  centos7 
このエントリーをはてなブックマークに追加

CentOS 7 に載っている MariaDB 5.5 を 10.3 にアップデート*1してみたので、その手順をメモ。

アップデート自体は yum で OK

単に MariaDB を更新するだけならば、以下の手順ですんなりアップグレードできます。

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash yum clean all yum update -y mysql_upgrade -u root -p

問題になるのは SQL_MODE の STRICT_TRANS_TABLES

MariaDB (MySQL)は当初はいろいといい加減な部分がありましたが、最近は機能も増えていろいろと厳密になってきています。

特にバージョンアップの際に問題になると思われるのは、最近のバージョン(10.2.4 以降)の SQL_MODE にデフォルトで設定されている STRICT_TRANS_TABLES という指定です。これにより INSERT 文の書き方がいい加減な場合、これまで通っていた INSERT 文が通らなくなるという不具合が発生します。

以下が MariaDB 10.3 系でのデフォルトの SQL_MODE です。

MariaDB [none]> show variables like 'sql_mode'; +---------------+-------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+-------------------------------------------------------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-------------------------------------------------------------------------------------------+

ちなみに、この SQL_MODE は

  • 10.1.7 以前は指定なし
  • 10.1.7 は NO_ENGINE_SUBSTITUTION, NO_AUTO_CREATE_USER
  • 10.2.4 以降は STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

という設定になっているようです。

とりあえず、デフォルトから STRICT_TRANS_TABLES を除くためには /etc/my.cnf.d/server.cnf[mariadb] のセクションに以下を追加する必要があります。

sql_mode='ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

変更後に MariaDB のデーモンを再起動させると、SQL_MODE が以下のようになっていることが確認できるはずです。

MariaDB [none]> show variables like 'sql_mode'; +---------------+-----------------------------------------------------------------------+ | Variable_name | Value | +---------------+-----------------------------------------------------------------------+ | sql_mode | ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-----------------------------------------------------------------------+
  • *1: DB をアップデートするといろいろ動かなくなったりするのであまりやりたくなかったのですが、あるテーブルで Row size too large (> 8126) というエラーを吐くようになってしまったので、ROW_FORMAT=DYNAMIC に変換するための苦肉の策です。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/11012
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン