AnyEvent :: DBI和数据库重新连接

时间:2011-10-07 11:13:01

标签: mysql perl event-handling database-connection dbi

我在单件包中使用AnyEvent :: DBI,并且在数小时后数据库/查询等中没有活动时,我在尝试发出查询时遇到此错误:

DBD::mysql::st execute failed: MySQL server has gone away at /usr/local/share/perl/5.10.1/AnyEvent/DBI.pm line 98.

一种简单的方法是:连接到DB ==>问题查询==>关闭连接。 这种方式是我在使用DBI时通常使用的方式。

我的问题是我无法找到使用AnyEvent :: DBI重新连接数据库的方法,除了创建一个新的AnyEvent :: DBI实例(新)。

任何建议都会很棒!

2 个答案:

答案 0 :(得分:2)

根据CPAN上的DBD :: mysql文档,您要使用:

$dbh->{mysql_auto_reconnect} = 1;

以下是参考资料的链接:

http://metacpan.org/pod/DBD::mysql

答案 1 :(得分:1)

在MySQL中有一个wait_timeout变量,用于设置非交互式连接的持续时间。

对于长时间运行的连接,您可以尝试将该值(默认值= 28800)更改为更合适的值。

可以使用简单查询更新

wait_timeout

mysql> SET SESSION wait_timeout = 50000;

并使用另一个

检索
mysql> SHOW VARIABLES LIKE 'wait_timeout';