以前に concrete5 で構築した某サイトの開発用サーバー (仮想マシン上の CentOS 5) を久々に起動させてブラウザーからアクセスすると、
不正なエラーが発生しました。
データベースのエラーが発生し、処理を中断しました
と表示されて、コンテンツを表示できなくなっていた。
site.pp の DB やユーザー情報の指定も間違いないし (これらが正しくない場合は「データベースに接続出来ません」となる)、MySQL 上での権限付与 (GRANT) をやり直しても変わらない。Web で検索すると同じ現象を取り上げたページがいくつか見つかるが、今回のケースはちょっと特殊なようだった。
解決の糸口になったのは、該当サーバー上で concrete5 を再インストールした際に表示された次のエラーメッセージ。
mysql error: [1: Can't create/write to file '/tmp/#sql_daa_0.MYI' (Errcode: 13)] in EXECUTE("SHOW COLUMNS FROM `CollectionSearchIndexAttributes`")
/tmp の状態を確認すると、確かに次の通りおかしなことになっていた。
・開発サーバーの /tmp $ ls -ld /tmp drwxrwsr-x 5 hoge hogege 4096 2011-12-23 00:00 /tmp/ ※ hoge, hogege の箇所は、それぞれ管理用に普段使用しているユーザー名とグループ名。 ・通常の /tmp $ ls -ld /tmp drwxrwxrwt 5 root root 4096 2011-12-23 00:00 /tmp/
所有者とパーミッションを通常の状態に戻すと、concrete5 の動作は正常に戻った。
# chown root:root /tmp # chmod 1777 /tmp
さて、肝心なのは「なぜこうなったか」だが、通常 /tmp の所有者や設定を変えることはないし、自作のスクリプトでも /tmp の権限をいじるような処理を書いた覚えはないので、考えられる可能性としては、Puppet ぐらいしかない。恐らく数ヶ月前にこの開発サーバー用のマニフェストをアレコレいじっていた際にマズいことを書いてしまい、それが反映されて今まで気付かなかったのだと思う。
くだらないことでハマって、時間を浪費してしまった。