Cacti 0.8.7i でMySQLへ接続できない問題の解決
まず、私が陥ったときの条件は
●同一サーバ上で利用することを前提にMySQL側でポートでの接続を禁止している。
(「my.cnf」にskip-networkingオプションを付けている)
●ソケットファイルを保存場所をデフォルトの「/tmp/mysql.sock」とは別のとこに作成している。
●Cactiの「include/config.php」内で「$database_hostname = "localhost";」としている。
になります。
PHPではMySQLへの接続時に接続先のホストがlocalhostの場合、ソケットを利用して接続することが出来るのですが、Cactiではソケットに関する設定がありません。そのため、ソケットによる接続にはデフォルトのソケットファイルへのパスが指定されるわけですが、このファイルをデフォルトと違う場所に作成していた場合にファイルが見つからず結果的に接続エラーとなってしまいます。
なので、解決方法としては
●ソケットファイルの保存場所をデフォルトの「/tmp/mysql.sock」に戻す。
●ポートによる接続を行えるようにするのと、Cactiの「include/config.php」内で
「$database_hostname = "127.0.0.1";」とする。
のいずれかになると思います。
それでもソケットによる接続で、尚且つファイルの場所をデフォルトと違う場所のままで接続したい場合はCactiの設定を以下のようにします。
●同一サーバ上で利用することを前提にMySQL側でポートでの接続を禁止している。
(「my.cnf」にskip-networkingオプションを付けている)
●ソケットファイルを保存場所をデフォルトの「/tmp/mysql.sock」とは別のとこに作成している。
●Cactiの「include/config.php」内で「$database_hostname = "localhost";」としている。
になります。
PHPではMySQLへの接続時に接続先のホストがlocalhostの場合、ソケットを利用して接続することが出来るのですが、Cactiではソケットに関する設定がありません。そのため、ソケットによる接続にはデフォルトのソケットファイルへのパスが指定されるわけですが、このファイルをデフォルトと違う場所に作成していた場合にファイルが見つからず結果的に接続エラーとなってしまいます。
なので、解決方法としては
●ソケットファイルの保存場所をデフォルトの「/tmp/mysql.sock」に戻す。
●ポートによる接続を行えるようにするのと、Cactiの「include/config.php」内で
「$database_hostname = "127.0.0.1";」とする。
のいずれかになると思います。
それでもソケットによる接続で、尚且つファイルの場所をデフォルトと違う場所のままで接続したい場合はCactiの設定を以下のようにします。
"include/config.php"
(色分け:書換、追記、コメント)
25:/* make sure these values refect your actual database/host/user/password */ 26:$database_type = "mysql"; 27:$database_default = "cacti"; 28:$database_hostname = ":/var/tmp/mysql/mysql.sock"; ※ソケットファイルを「/var/tmp/mysql/mysql.sock」に作っている場合。 ちなみに先頭のコロンは必須です。 29:$database_username = "cactiuser"; 30:$database_password = "cactiuser"; 31:$database_port = "3306"; 32:$database_ssl = false;
基本的にこの問題は、Cactiだけでなくデータベースを使用する全てのスクリプトで起こる可能性がある問題ではないかと思います。
作成日:2012.02.18
更新日:2012.02.18