※弊社記事はたぶんにPRが含まれますので
話半分で受け取ってください。

とある博物館の売店の営業は無事に終了しました。

MySQLを5.5にアップデートしたら動かなくなったという話

 remiレポジトリでphpをインストールしたついでに、MySQLも5.1から5.5にアップデート。したら起動出来なくなってすっごいあせったと言うお話。解決しました。
 いやー、ひさびさに焦ったわー。。

 phpをremiレポジトリの管轄にしたついでに、MySQLもutterramblingsからremiの管轄にしちゃおう、と思い、お気軽に

# yum --enablerepo=remi update mysql

したのが始まりでした。
 アップデートはなんの問題も無く終了したかのように思えたのですが、いざ、mysqlを起動としたところ、エラーで起動出来ない!

# service mysqld start
MySQL Daemon failed to start.
Starting mysqld:                [FAILED]

 で、なんのかんの調べて試して解決しました。
 結論から言うと、my.cnf に無効な記述があったために立ち上がらなかったみたいです。

解決方法

my.cnf の見直し

 5.5ではこれまで使われていたいくつかのシステム変数やSQL文、サーバオプションが使えなくなっています。これらが設定ファイルに存在するとエラーで起動出来なくなるようです。
 ざっとまとめると以下のような感じ。

システム変数

  • language (lc_messages_dir, lc_messages)
  • log_bin_trust_routine_creators (log_bin_trust_function_creators)
  • myisam_max_extra_sort_file_size
  • record_buffer(read_buffer_size)
  • sql_log_update
  • table_type(storage_engine)

※カッコ内は代替の変数

サーバ変数

  • –default-character-set, –default-collation (–character-set-server, –collation-server)
  • –default-table-type (–default-storage-engine)
  • –delay-key-write-for-all-tables (–delay-key-write=ALL)
  • –enable-locking, –skip-locking (–external-locking, –skip-external-locking)
  • –log-bin-trust-routine-creators (–log-bin-trust-function-creators)
  • –log-long-format
  • –log-update
  • –master-host, –master-user, –master-password, –master-port, –master-connect-retry, –master-ssl, –master-ssl-ca, –master-ssl-capath, –master-ssl-cert, –master-ssl-cipher, –master-ssl-key (CHANGE MASTER TO文)
  • –safe-show-database
  • –skip-symlink, –use-symbolic-links (–skip-symbolic-links, –symbolic-links)
  • –sql-bin-update-same
  • –warnings (–log-warnings)

※カッコ内は代替の変数

 より詳しい内容は、以下のページの「Removed Features」の項ににまとまっています。

skip-innodbの設定方法

 また、メモリ節約のために「–skip-innodb」を設定してInnoDBを使わない設定にしている方は多いと思いますが、MySQL 5.5 からは単体でこれを設定すると以下のようにエラーになります。(ログは /var/lib/mysql/ の中のにある、拡張子が .err のファイルに記録されています。)

[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

 ではInnoDBを使用しないようにするにはどうするかというと、以下のようにmy.cnfに設定します。

skip-innodb
default-storage-engine=MyISAM

 または

innodb=OFF
default-storage-engine=MyISAM

 5.5からはInnoDBがデフォルトになっているため、innoDBを止めちゃうと何使ったら良いのか分からなくなる、って感じでしょうか。

ib_logfileの削除

 エラーログに以下のようなメッセージが記録されている場合は、ログファイルが原因のようです。

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 16777216 bytes!

 この場合、 /var/lib/mysql/ の中にある ib_logfile0 と ib_logfile1、2つのファイルを移動、あるいは削除することで起動出来るようになるようです。

データベースのアップグレード

 設定の見直しやログファイルの削除によって無事にmysqldを起動させることが出来たら、データベースのアップグレードを行います。

# mysql_upgrade -u root -p

という感じ

 いやー、起動しなくなったときはマジ焦りました。。google先生様々です。
 yumだとお気楽にアップデート出来ちゃうのですが、ものによっては設定が大きく変わっていることがあるので、アップデートする際は気を付けましょう。(自分のことは棚に上げる。)

参考

MySQL徹底入門 第4版 MySQL 8.0対応

  • メーカー:翔泳社
  • カテゴリ:Kindle版
  • 発売日:2020/07/06

関連する記事