Home > レンタルサーバー | 備忘録 > MySQLの接続タイムアウト設定

MySQLの接続タイムアウト設定

「PHPスクリプトから接続タイムアウトを設定する方法」のメモ

【はじめに】
最近、商品カタログをWebで表示するプログラムを作成し納品した。
お客様に商品登録をされてる状況ですが、7/7(火)朝に画面が表示されない、遅いという問題があるとの連絡あり。

調査すると、いつもではないが、htmlは比較的すぐに読まれるが(遅い時は遅いけど)、PHPスクリプトは無茶苦茶遅かったり、応答がない。
ただ、そうでないこともあり、要は安定していない。

Windows系のレンタルサーバーでプログラムを動かしているのだが、何が原因だろう。

動作環境のデータをダウンロードして開発環境(CentOS)や他社Linux系レンタルサーバーでテストしてみたが、何もストレスを感じることなく使える。
(さらっと1行で書きましたが、ファイルのダウンロード・アップロード、データベースのエクスポート・インポートをやってます。
問題のサーバーが安定しないので、ftpは遅い、途中で切れるため、時間はかかってます^^;この仕事も評価してくれるお客様だったら苦労は報われます)


導入した当初は普通に動いていたことを考えると、レンタルサーバー側に原因があるような気がする。
とはいうものの、原因がわかるまであえて断言しないようにします(苦笑)。

【対応開始】
とりあえず、遅い現象が発生した時に、何が原因なのかを調べるため、スクリプトを書いてみました。
主に調べたことは以下の2点です。(他にもやっていますが、集約するとこんなもんです)
(1)スクリプトは本当に実行されているのか(time()関数の値を記録し表示)
(2)DBにMySQLを使っているが、接続で待たされているのではないか。

結論は、
(1)スクリプトの実行開始までに30秒とか40秒とか待たされる、また実行されないことがある。
実行されると1秒以内にはプログラムは終了している。一度だけ50秒かかったことがあるが、再現しない。
(2)MySQLとの接続は問題なさそう。

htmlファイルは比較的早くGETできるので、プログラム実行の問題と思われます。サポートに調査をお願いすると、
レンタルサーバーに障害が起こっているとの回答あり。先に見ておけばよかった^^;。

障害報告ページを見ると7/6正午頃から障害発生と書かれている。
しかし、サービス名だけなので、契約しているサーバーなのかどうかわからないよぉ(苦笑)

まだ復旧していないようだが、レンタルサーバー側の対応を待つことにする。

【では本題に入ります】

前置きが長くなりました^^;。

今回のテストプログラム作成でMySQLの接続タイムアウト設定についても調べたが、すぐにわからなかった。
当初、mysql_connect()の引数か何かで設定できるのかと思ったのだが、該当するものがない。
ネットで調べてみるとphp.iniの設定変更でいけることが判明。

後述するコードで確かに変更できていました。
複数台のMySQLサーバーの中から生きているサーバーに接続するなんてことができそうですね。
(実際にタイムアウトしているかどうかは未検証です)

【設定コード】

<?php
    $key = "mysql.connect_timeout";
    $new_sec = 10;
    echo "local value:".ini_get( $key )."<BR>";
    ini_set( $key, new_sec );
    echo "new value:".ini_get( $key )."<BR>";
/*
== result ==
local value:60
new value:10
*/

?>


【謝辞】
掲載しているソースコードは
ソースコード HTML化 コンバーター「唐辛子」
を利用してBlog用のhtmlを生成し、貼り付けています。いつも、ありがとうございます。