検証でzabbix3.0のインストールをしていて何度かハマったので残しておきます。
事象
Zabbixをインストールした直後、ブラウザからセットアップしてて、
Configure DB connection
の最中に、
Error connecting to database: No such file or directory
が
表示されてしまう。
mysqlもzabbix-serverも上がってるはずなのに・・・
原因
Zabbix(正確にはPHP)が
mysql.sock
を見つけることが出来ずに、発生している。
mysqlが吐き出しているmysql.sockの場所と、
PHPが探しに行くmysql.sockの場所が一致していないという。
そりゃプロセスは上がっててもお互いが認識していないんじゃ何も意味がない。思いはしっかり伝えなければ。
/etc/my.cnfの内容確認
というわけでまずは
/etc/my.cnf
を確認してみる。
すると、
1 |
socket=/var/lib/mysql/mysql.sock |
と書かれている。
php.iniの内容確認
次に、
php.ini
を確認してみる。
1 |
grep default_socket php.ini |
1 2 3 4 |
default_socket_timeout = 60 ; pdo_mysql.default_socket = ; mysql.default_socket = ; mysqli.default_socket = |
みっつも設定するっぽそうな項目がある。
そして何も設定されていない。
「デフォルトどこになってるんだろう」って話ですが、
どうやってコンパイルしたかによります。
だいたい、
/tmp/mysql.sock
とかになってるんじゃないでしょうか。
※php -i を上手いことgrepすれば確認できると思います。
なるほど、それぞれが違う場所を見に行ってるようだ
つまり、mysql側での設定で、
socketが、
/var/lib/mysql/mysql.sock
に吐かれてるのに対し、
PHP側では、
/tmp/mysql.sock
を見に行っているため、PHPがDBを見つけることができてない状態というわけです。
解決方法は2パターン
お察しかもしれませんが、
- mysql側のconf(my.cnf)をPHP側に合わせる
- PHP側のconf(php.ini)をmysql側に合わせる
です。
他にアプリケーションが動いたりしていないのであれば本当にどっちでもいいと思います。
ちなみにphp.iniだとそれっぽい項目が3つあったけど、どれを変えればいいの?
試してみた結果、
; mysqli.default_socket =
を変えれば上手くいきました。
こんな感じに。
1 |
mysqli.default_socket = "/var/lib/mysql/mysql.sock" |
が、もしやってみて駄目だったら3つに同じパスを書いてあげれば間違いないと思います。
mysql側を変更したらmysqldの再起動、
php側を変更したらapacheの再起動を忘れずに。
そんな感じです。
今日の一言
昔zabbixって名前かっけーなーって思ってました。