- blogs:
- cles::blog
2019/06/07

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


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でログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . Windows 10 で勝手にログアウトされないようにする(3559)
2 . リモートデスクトップで Alt + PrtSc と同じことをするには(3052)
3 . RDP のプロトコルを TCP だけに変更する(2365)
4 . 「日次」は「にちじ」じゃない?(2147)
5 . リモートデスクトップで Ctrl + Alt + Del キーを送信するには(2073)
2 . リモートデスクトップで Alt + PrtSc と同じことをするには(3052)
3 . RDP のプロトコルを TCP だけに変更する(2365)
4 . 「日次」は「にちじ」じゃない?(2147)
5 . リモートデスクトップで Ctrl + Alt + Del キーを送信するには(2073)
cles::blogについて
Referrers