Mysql perl dbi在断开连接时重新连接

Mysql perl dbi在断开连接时重新连接,mysql,perl,dbi,Mysql,Perl,Dbi,我搜索过谷歌,但找不到我认为是一个简单问题的答案 我有一个Perl代码(下面的示例),它每3秒钟获取一次数据,并将接收到的数据更新到MySQL数据库中,但有时MySQL数据库不可用,脚本会失效。如果MySQL连接失败,如何重新建立连接 use DBD::Mysql; sub updateMysqlDB{ my $connect = DBI->connect("dbi:mysql:$database:$host", $user,

我搜索过谷歌,但找不到我认为是一个简单问题的答案

我有一个Perl代码(下面的示例),它每3秒钟获取一次数据,并将接收到的数据更新到MySQL数据库中,但有时MySQL数据库不可用,脚本会失效。如果MySQL连接失败,如何重新建立连接

use DBD::Mysql;

sub updateMysqlDB{
my $connect = DBI->connect("dbi:mysql:$database:$host", 
                        $user,
                        $pw,
                        {RaiseError => 1}
                        );
$myquery = "My sql query to insrt data into columns";
$query_handle=$connect->prepare($myquery);
$query_handle->execute();
$connect->disconnect;
}

while (1) {

if data received call updateMysqlDB ();

else wait for data { sleep 3 ;}
}
驱动程序(DBI用于MySQL数据库)支持属性
MySQL\u auto\u reconnect
。要打开它,只需执行

$connect->{mysql_auto_reconnect} = 1;
请注意,文档中有以下警告:

如果使用了“lock tables”,则不建议将mysql\u auto\u reconnect设置为on,因为如果DBD::mysql reconnect to mysql,所有表锁都将丢失。关闭自动提交时忽略此属性,关闭自动提交时,DBD::mysql不会自动重新连接到服务器


您还可以查看此线程:


本文讨论了如何处理“MySQL服务器已消失”问题,但也有一些答案适用于您的问题。除了
mysql\u auto\u reconnect
开关外,您还可以使用那里的建议。

hi,您能给我举一个使用auto\u reconnect的完整示例吗?我对perl还是相当陌生,我可以像下面这样传递属性吗?我的$connect=DBI->connect(“DBI:mysql:$database:$host”,$user,$pw,{RaiseError=>1,AutoCommit=>1,mysql\u auto\u reconnect=>1});是的,应该行。您还可以在创建
$connect
后设置位,如
$connect->{mysql\u auto\u reconnect}=1
。但是,在使用此特性之前,需要考虑由TED指定的警告。您还可以在CPAN上查看
DBIx::Connector
,了解
快速、安全的DBI连接和事务管理