使用DBIx::Connector比简单地将mysql\u auto\u reconnect设置为1有什么好处?
在处理持久性MySQL连接时,一个问题是它们在某个超时(通常为28800秒)后被删除。 Connector似乎完成了自动重新连接到已断开连接的工作,但它为每个SQL语句添加了更多的Perl代码,这可能会让人恼火。例如,而不是:使用DBIx::Connector比简单地将mysql\u auto\u reconnect设置为1有什么好处?,mysql,perl,module,dbi,Mysql,Perl,Module,Dbi,在处理持久性MySQL连接时,一个问题是它们在某个超时(通常为28800秒)后被删除。 Connector似乎完成了自动重新连接到已断开连接的工作,但它为每个SQL语句添加了更多的Perl代码,这可能会让人恼火。例如,而不是: $dbh->do('DROP DATABASE stackoverflow'); 人们不得不说: $conn->run( fixup => sub { my $dbh = shift;
$dbh->do('DROP DATABASE stackoverflow');
人们不得不说:
$conn->run(
fixup => sub {
my $dbh = shift;
$dbh->do('DROP DATABASE stackoverflow');
}
);
假设不需要事务。为什么要使用DBIx::Connector而不是传递$dbh->{mysql\u auto\u reconnect}=1,这也很有效
都说。。。如果您使用的是MySQL,并且不关心DBIx::Connector的其他优点(例如,因为您从不分叉或使用线程),那么
MySQL\u auto\u reconnect
可能非常适合您。除了重新连接之外,我还想使用DBIx::Connector作为其保存点。不幸的是,虽然使用InnoDB的MySQL支持保存点,但在上的示例对我来说是一个错误。DBIx::Connector是在#perl向我推荐的,作为“数据库已经消失”错误的解决方案。Minimalist-我建议您发布您尝试过的代码和得到的错误。另请参见t/svp_live.t了解工作保存点代码(我在编写它时确实使用InnoDB进行了测试,IIRC)。@Theory:t/svp_live.t中的MySQL代码被注释掉了。我取消了它的注释,并(稍加修改)在我的系统上进行了验证。有可能我第一次没有正确使用它。感谢您的帮助。使用DBIx::Connector,我可以编写一个在Mojolicious等框架内运行的web应用程序,而不必关心该应用程序是否将在Hypnotoad等预分叉服务器上运行。它只是消除了对应用程序如何部署的担忧。