これはよくある問題のようで、よく検索しましたが、状況に対する解決策が見つかりませんでした。mysql_auto_reconnect と connect_cached を試しましたが、役に立ちませんでした。これは基本的に私がここに持っているコードです。mysql サーバーは、アイドル状態が 30 秒続くと接続を閉じます。mysql_auto_reconnect は、サーバーから最初に $dbh->disconnect (コードでコメント) したときにのみ機能します。connect_cached メソッドはここで機能しますが、while ループで connect_cached メソッドを使用すると「接続が失われました」というメッセージが表示されます。
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);
何か考えはありますか?