読者です 読者をやめる 読者になる 読者になる

/home/by-natures/dev*

ソフトウェア開発者として働く人の技術的なメモ

yum で間違って MySQL を 5.5系にアップグレードしたら MySQL が起動しなくなった話

自分のサーバなのに、久々に焦った話。

[caption id="attachment_2533" align="alignright" width="150"]Klout ではソーシャルの影響度を測れます。私の場合は、Twitter と Facebook が半々。 Klout ではソーシャルの影響度を測れます。私の場合は、TwitterFacebook が半々。[/caption]ソーシャルスコアリングサービスの Klout は、FacebookTwitter で、自分がどの程度影響力があるのかを数値化してくれるユニークなサービスです。この Klout に WordPress も接続できるので、ブログ運営の励みに接続しようと思っているのですが、JetPack プラグインの不具合があり、上手くいきませんでした。

今日、WordPress.com のフォーラムで「最新版の JetPackWordPress をインストールしたら、Klout に接続出来た」という投稿が上がっており、私も試したのですが失敗…。Apache のエラーログ、Klout からのログイン URL、そして JetPack プラグインスクリプトを眺めたりして、原因らしき個所は見つかったものの、原因の解決方法が分かりませんでした。

原因個所は PHP から MySQL の接続箇所だったのと、JetPack 側でエラーハンドリングしているにも関わらずエラーが出力されてしまっていたので、「そういえば最近 PHP をアップデートしてないなー(・ω・)」何て思いつつ、メンテナンスも兼ねて PHP をアップデート:

[root]# yum update php

そして、確認のためにブログを開くと…

データベース接続確立エラー

やってしまった\(^o^)/

原因

yum update phpmysql 本体が巻き込まれてた

自宅サーバなので何しても自己責任なので、普段はやりたい放題やってるのですが、さすがに php なんて巨大なパッケージの yum update は確認なしに yes しちゃダメですね、という教訓。。

yum.log に update されたパッケージが残ってたので掲載します。MySQL が丸ごと巻き込まれてますね… orz

Mar 04 00:25:33 Updated: php-common-5.3.22-15.el5.art.x86_64
Mar 04 00:25:33 Updated: php-pdo-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-cli-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-dba-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-pgsql-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-mssql-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-odbc-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-soap-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-tidy-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-xmlrpc-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-snmp-5.3.22-15.el5.art.x86_64
Mar 04 00:25:34 Updated: php-mbstring-5.3.22-15.el5.art.x86_64
Mar 04 00:25:35 Updated: php-mcrypt-5.3.22-15.el5.art.x86_64
Mar 04 00:25:35 Updated: php-imap-5.3.22-15.el5.art.x86_64
Mar 04 00:25:35 Updated: php-bcmath-5.3.22-15.el5.art.x86_64
Mar 04 00:25:35 Updated: php-gd-5.3.22-15.el5.art.x86_64
Mar 04 00:25:35 Updated: php-ldap-5.3.22-15.el5.art.x86_64
Mar 04 00:25:35 Updated: php-xml-5.3.22-15.el5.art.x86_64
Mar 04 00:25:35 Updated: php-common-5.3.22-15.el5.art.i386
Mar 04 00:25:36 Updated: php-devel-5.3.22-15.el5.art.x86_64
Mar 04 00:25:39 Updated: mysql-libs-5.5.30-15.el5.art.x86_64
Mar 04 00:25:40 Updated: mysql-5.5.30-15.el5.art.x86_64
Mar 04 00:25:40 Updated: mysql-libs-5.5.30-15.el5.art.i386
Mar 04 00:25:40 Updated: php-mysql-5.3.22-15.el5.art.x86_64
Mar 04 00:25:41 Updated: mysql-5.5.30-15.el5.art.i386
Mar 04 00:25:42 Updated: mysql-server-5.5.30-15.el5.art.x86_64
Mar 04 00:27:53 Updated: mysqlclient15-5.0.90-2.el5.art.x86_64

MySQL 5.5系の廃止オプションに引っかかった

でも MySQL がアップデートされただけなら、restart なり何なりすれば動くはず…

[00:31:53 root@bynatures ~]# /etc/rc.d/init.d/mysqld start
MySQL Daemon failed to start.
mysqld を起動中:                                           [失敗]

まさかの失敗\(^o^)/ しかも mysqld.log には何のログも出力されない!ログが無いと調査できないのでお手上げです。。数十分、ブログを「データベース接続確立エラー」なんて無機質な状態で放置しているのも限界だったので、頼りの Google 先生に助けを求めました。すると、意外にも同じような症状でトラブってる方が沢山…。

どうやら、5.5 系だと廃止オプションがあり、このオプションを /etc/my.cnf 等に設定していると、MySQL が起動しないんだそうです。しかし廃止オプションを見ても私のサーバの /etc/my.cnf で用いている設定項目はありませんでした。主に WordPress 用にしか用いていない MySQL なので、大した設定をしてないからなぁ…と思い、色々漁っていると、trippyboy さんのブログ「TrippyBoyの愉快な日々」に、/etc/my.cnf の [mysqld] default-character-set は 5.5系で廃止され、代わりに character-set-server=utf8 を利用する必要があることが書かれていました。

5.5 系の廃止オプションは sakaik さんのブログ「sakaikの日々雑感~(T)編」にまとまっていますので、ご覧ください。私はシステム変数しか見てなかったのでdefault-character-set が廃止されていることに気づくのが遅れましたが、この設定を /etc/my.cnf に入れている人って多いんじゃないでしょうか…

教訓

影響が大きいと考えられるパッケージのアップデート時には、依存関係から一緒にアップデートされるパッケージも確認しましょう(^_^; PHP のアップデートなのに MySQL まで巻き込まれるのは依存関係が間違ってる気がしなくもないですが… それはそれ、これはこれですね。

復旧作業を行う場合や、このようなトラブルで別途 mysql_upgrade コマンドを発行する必要がある場合は、一番大切なデータである /var/lib/mysql を退避させるのを忘れずに!今回は使いませんでしたが、日ごろのバックアップも大切です。私は Amazon S3 上で MySQL のダンプを保存しています。(当時の記事:「AmazonS3 を使ってデータをバックアップしてみた」も合わせてどうぞ!)

[root]# cp -Rp /var/lib/mysql /var/lib/mysql.bk

余話

そして当初の目的だった Klout には、結局繋ぐことができず…orz