揮発性のメモ2

http://d.hatena.ne.jp/iww/

MySQL server has gone away

コネクションをオープンして放置していると、一定時間でセッションが切られてしまう。
システム開発の備忘録 | MySQL - sleepプロセスが溜まる
MySQL のコネクションタイムアウトと削除されたプロセスのコネクションの残留 | さくらたんどっとびーず

set-variable  = wait_timeout = 9

my.cnfにて、9秒でタイムアウトするようにして実験

<?
    mysql_connect("localhost","hoge","hoge");

    sleep(10);

    echo mysql_ping() ? "TRUE \n" : "FALSE \n";
    // ★昔はここで自動再接続されてた(今は自動再接続されない)
    $result = mysql_query( "SELECT NOW() AS hoge" );
    if( $result==FALSE ){
        echo mysql_error() ."\n";
    }
FALSE
MySQL server has gone way

PHP: mysql_ping - Manual
MySQL5.0.13よりも前のバージョンはmysql_ping()の実行時に自動的に再接続する仕様だったが、5.0.13以降では自動的には接続しなくなった。らしい。(PHPのバージョンには依存しない)
つまり、もう一度mysql_connect()する必要がある。

mysql_ping()のもう一つの使い方

mysql_ping()を実行すると、タイムアウトの時間が延長される。らしい。

<?
    mysql_connect("localhost","hoge","hoge");

    for($i=0;$i<20;$i++){
        sleep(1);
        // ★1秒おきにpingを打っていると切断されない
        echo mysql_ping() ? "TRUE \n" : "FALSE \n";
    }

    sleep(10);
    // ★10秒以上たってしまうので切断される
    echo mysql_ping() ? "TRUE \n" : "FALSE \n";

ループ中は切断されない。