CentOS 5にインストールした MySQL を 5.0.67 から 5.5.17 にアップデートしたら起動しなくなったので解決方法をメモ。
(いきなりバージョン飛ばし過ぎというツッコミはおいておいて・・・)
まずは基本、mysql.log を確認。
111102 23:44:11 [Note] Plugin 'FEDERATED' is disabled./usr/libexec/mysqld: Table 'mysql.plugin' doesn't exist111102 23:44:11 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
だそうで。
とりあえず言われた通りに mysql_upgrade してみるけどサーバに接続できないと怒られる。だからそのサーバが起動しないんだって!
試行錯誤の結果、 my.cnf の設定が原因であることが判明。
サーバの文字コード設定が default-character-set から character-set-server に変更されています。
実はこの変更は MySQL 5.0 からされていたようですが(知らなかった・・・汗)、MySQL 5.5.3 で非推奨のパラメータが全て廃止された(エラーになるようになった)ために起動しなくなったのでした。
下記のブログが参考になりました。MySQL 5.5.3 での主な変更点がまとめられています。
「え? そこ?」 という感じだが、サーバの文字コード指定の記述を修正したら mysqld_safe が起動するようになった。ついでに FADERATED エンジンも使わないので無効にしておく。
[mysqld]character-set-server=utf8skip-federated
その後、mysql_upgrade を実行し、セーフブートから通常の起動に変更して無事にアップデート完了。
ちなみに、アップデート後に my.cnf のサーバ文字コードの設定の記述を default-character-set に戻して mysqld を起動してみたら、ログには以下のようなエラーが出力された。
111103 0:19:50 [ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'111103 0:19:50 [ERROR] Aborting
今度はちゃんと設定がおかしい旨のメッセージが出力されている。
テーブルのアップグレードチェックでエラーとなった場合は、default-character-set に関するエラーメッセージが出力されずに mysqld がシャットダウンしてしまうようなので要注意です。
(2011/11/11:追記)
MySQL 5.5.3-m3 で廃止された変数やオプションは default-character-set だけではありません。
その他の廃止された変数やオプションを指定している場合は、これらも対応しなければなりません。
下記のブログで廃止になった変数とオプションがまとめられています。
[mysql]MySQL 5.5.3-m3 で廃止になった変数やオプションなどを整理しました