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 :: MySQL 5.5 Reference Manual :: 13.3.4 InnoDB Startup Options and System Variables
- MySQL 5.1から5.5への移行時の問題 – Road of Professional SE
- InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes – 祈れ、そして働け ~ Ora et labora