XOOPSシステムの不調→修復
Category : サーバ管理日記
Published by M-naka on 2004/6/9
りなざうで修復……。
 6/8に行われた部屋のブレーカチェック作業後に異変が。
 このサイトが見えなくなっていたのである。

  Fatal error: Call to a member function on a non-object in
  /home/httpd/html/xoops/kernel/configitem.php on line 286


 こんなエラーが出る。調べたところ、MySQLデータベースに上手く接続できていないことが原因らしい。googleで世界中のサイトを漁ってみたが、ある意味鬼門なトラブルらしい。解決法は見つからず……。

 念のためmysqldumpでXOOPSに使っているデータベースのバックアップを取っておいた。まぁ最悪Amatsuに速攻移植という手があるが……。

 んでとりあえずは諦めて会社に行った。行きの電車の中でりなざうを使って修復を試みたが、そもそも原因が分からない。mysqlコマンドでXOOPS用のデータベースにはアクセスできるから、MySQLの問題ではないようだ。困った。

 帰りの電車の中でりなざうで修復に再挑戦。途方に暮れた状態なのは同じだが、当たりを付けてやってみるしかない。で、勘でmainfile.phpをチェック。同じディレクトリ上にmainfle.dist.php(サンプルファイル)があったので、見比べてみた。

 すると、mainile.phpのデータベース参照先が「localhost:/tmp/mysql.sock」となっていることが判明。一方mainfile.dist.phpは単に「localhost」。うーん、確かにインストール時にこう入力した記憶が。で、とりあえずコロン以下をコメントアウトしてみたところ……。

 直ったー!!!

 りなざう使って電車の中で直せるとは思わなかった。思わず車内で軽くガッツポーズ。いやぁ良かったー。とりあえず同じ障害に遭った人のために書き留めておく。

 調べてみると、どうもmysql.sockの存在するディレクトリの指定が問題らしい。元々の設定だと/tmp/mysql.sockとしてあったのだが、今はこのsockファイルは存在しない。/etc/my.cnfでの定義は/var/lib/mysql/mysql.sock。念のためここから/tmpへシンボリックリンクを張っておいた。恐らくmainfile.phpの記述を変えなくても、このシンボリックリンクを張ったことで解決できたのかもしれない。怖いので元に戻す気はないが……。