The mysql driver is not currently installed と言われて怒られた話。

今日、Zend Frameworkで組まれたWebアプリを動かしたらこんなエラーが出た。

Fatal error: Uncaught exception ‘Zend_Db_Adapter_Exception’ with message ‘The mysql driver is not currently installed’

mysqlドライバーがインストールされてないから使えませんよ>< ってことかなぁ。phpinfo()で状況を見たら、確かにmysqlモジュールは読み込まれてなかった。

昨日までは動いていたんですけどね(´;ω;`)  とりあえずphp.iniにextensionでmysql.spやらpdo_mysql.soあたりの記述がされてないなかなーと思って見てみたけどそれもしっかり書かれていた。

PHPだけじゃないかもしれないと思い、Apacheのエラーログをみてみると、なんだか怪しい記述を発見。

PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php/modules/mysql.so’ – libmysqlclient.so.15: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php/modules/mysqli.so’ – libmysqlclient.so.15: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php/modules/pdo_mysql.so’ – libmysqlclient.so.15: cannot open shared object file: No such file or directory in Unknown on line 0

おお……問題の箇所どんぴしゃりなエラーですな。共有オブジェクト「libmysqlclient.so.15」が開けませんよ~ということですかね。
試しにfindコマンドでこのファイルを探してみたら、/usr/lib/mysql に入っていました。コイツ自体はシンボリックリンクの模様。実体は「libmysqlclient.so.15.0.0」っていう名前でした。

ファイルはあるのに読み込めないということは、リンクを繋ぎ直してやればいい、ということで、ldconfigコマンドで共有オブジェクトのリンクを更新してみました。

# ldconfig -v | grep libmysql

しかしお目当ての文字列は出てこず。

設定ファイルであるld.so.confの中身を見ると、以下の記述がありました。

include ld.so.conf.d/*.conf]

操作していた当時は特におかしいと思わなかったのですが、「]」って本来いらない文字列ですよね。
この時はどうしても読み込まないので、デフォルトの共有ディレクトリ直下(/usr/lib)に「libmysqlclient.so.15」をコピーしました。

# cp /usr/lib/mysql/libmysqlclient.so.15 /usr/lib

これでまたldconfig -v | grep libmysql をやってみたら、やっと出て来ました;;

Webサーバーを再起動して一応一件落着。

解決した後、ld.so.confの怪しい記述を修正してみました。

include ld.so.conf.d/*.conf

この状態でもう一度ldconfigを実行したら、しっかり出てくるようになりました!

# /sbin/ldconfig -v |grep libmysql
libmysqlclient_r.so.15 -> libmysqlclient_r.so.15.0.0
libmysqlclient.so.15 -> libmysqlclient.so.15.0.0
libmysqlclient_r.so.15 -> libmysqlclient_r.so.15
libmysqlclient.so.15 -> libmysqlclient.so.15

ダブってしまっているので暫定的に作ったリンクは削除して、重複を解消して今度こそフィニッシュ。

間違いの元は記述ミスだったんですね……まじつらいわ(´;ω;`)