今日、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
ダブってしまっているので暫定的に作ったリンクは削除して、重複を解消して今度こそフィニッシュ。
間違いの元は記述ミスだったんですね……まじつらいわ(´;ω;`)