我搜索了谷歌,但找不到我认为简单问题的答案。
我有一个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 ;}
}
答案 0 :(得分:8)
DBD::mysql驱动程序(DBI用于MySQL数据库)支持属性mysql_auto_reconnect
。要打开它,只需执行
$connect->{mysql_auto_reconnect} = 1;
请注意,文档有此警告:
如果使用'lock tables',则不建议将mysql_auto_reconnect设置为on,因为如果DBD :: mysql重新连接到mysql,则所有表锁都将丢失。关闭AutoCommit时会忽略此属性,并且当AutoCommit关闭时,DBD :: mysql将不会自动重新连接到服务器。
答案 1 :(得分:7)
您还可以查看此主题:http://www.perlmonks.org/?node_id=317168
这讨论了处理" MySQL服务器已经消失的方式"问题,但一些答案也适用于你的问题。除mysql_auto_reconnect
开关外,您还可以使用此处的建议。