2013-04-11 1 views
0

Это обычная проблема, и я много искал, но не нашел решения для моей ситуации. Пробовал mysql_auto_reconnect и connect_cached, но не помог. Это в основном код, который у меня есть. Сервер mysql закроет соединение после 30 секунд бездействия. Функция mysql_auto_reconnect работает только тогда, когда я сначала $ dbh-> отключается от сервера (прокомментирован в коде). Метод connect_cached работает здесь, но я все еще получил сообщение «потерянное соединение», используя метод connect_cached в цикле while.perl + mysql Потерянное соединение с сервером MySQL во время запроса

my $dbh = DBI->connect_cached($mysql_data_source, $mysql_username, $mysql_passwd, {'RaiseError' => 1}); 
    $dbh->{AutoInactiveDestroy} = 1; 
    $dbh->{mysql_auto_reconnect} = 1; 
    print strftime('%F %T', localtime()); 
    print "\n"; 
    #$dbh->disconnect(); 
    sleep 30; 
    $dbh = DBI->connect_cached($mysql_data_source, $mysql_username, $mysql_passwd, {'RaiseError' => 1}); 
    print strftime('%F %T', localtime()); 
    my $sql = "some sql"; 
    my $hashref = $dbh->selectall_hashref($sql, "id"); 
    my $info_hashref = $dbh->{mysql_dbd_stats}; 
    print Dumper($info_hashref); 
    print Dumper($hashref); 

У вас есть идея?

ответ

0

Вы можете попробовать манипулировать тайм-аут, возможно, добавив в вашу связную: mysql_connect_timeout = 60

Конечно, если запрос принимает, что долго, было бы целесообразно рассмотреть SQL.

+1

mysql_auto_reconnect и $ dbh-> ping() работает. DBD :: Safe - лучший выбор. – dezhi