Perl 如果数据库连接失败,请尝试重新连接
我是perl的新手,我的场景是有一个主机数组, 在一个循环中,我创建DNS并连接到数据库。 但是,如果任何主机没有响应或停机,那么该循环就会中断 而剩余的主机无法连接,我的问题是如何跳过该操作 意味着如果任何主机无法连接,那么我想跳过该主机并与另一台主机连接。。。 大家好, 我是perl的新手,我的场景是我有一个主机数组。 在一个循环中,我创建DNS并连接到数据库。 但是,如果任何主机没有响应或停机,那么该循环就会中断 而剩余的主机无法连接。我的问题是如何跳过该操作 意味着如果任何主机无法连接,那么我想跳过该主机并与另一台主机连接…或者再次尝试重新连接该主机。。。 下面给出了代码片段Perl 如果数据库连接失败,请尝试重新连接,perl,Perl,我是perl的新手,我的场景是有一个主机数组, 在一个循环中,我创建DNS并连接到数据库。 但是,如果任何主机没有响应或停机,那么该循环就会中断 而剩余的主机无法连接,我的问题是如何跳过该操作 意味着如果任何主机无法连接,那么我想跳过该主机并与另一台主机连接。。。 大家好, 我是perl的新手,我的场景是我有一个主机数组。 在一个循环中,我创建DNS并连接到数据库。 但是,如果任何主机没有响应或停机,那么该循环就会中断 而剩余的主机无法连接。我的问题是如何跳过该操作 意味着如果任何主机无法连接,
@arr_ =('host1','host2');
foreach $host (@arr_){
@Mydsn =("dbi:mysql:$MYSQL_DATABASE:$host:$MYSQL_PORT","$MYSQL_USER","$MYSQL_PWD");
my $my_connection = DBI->connect(@Mydsn, { RaiseError => 0, PrintError => 1 } ) or die("Fail to connect Database connection");
### Here how can i skip if mysql is not able to connect with breaking execution of script
}
@arr_=('host1','host2');
foreach$host(@arr\ux){
@Mydsn=(“dbi:mysql:$mysql_数据库:$host:$mysql_端口”,“$mysql_用户”,“$mysql_PWD”);
我的$my_connection=DBI->connect(@Mydsn,{RaiseError=>0,PrintError=>1})或die(“连接数据库连接失败”);
###在这里,如果mysql无法连接到中断脚本执行,我怎么能跳过呢
}
请帮帮我!
提前谢谢
请帮帮我!
提前感谢die
立即停止脚本。改用next
。调整上述代码:
my @arr = ('host1','host2');
foreach my $host (@arr){
my @mydsn = ("dbi:mysql:$MYSQL_DATABASE:$host:$MYSQL_PORT","$MYSQL_USER","$MYSQL_PWD");
my $my_con = DBI->connect(@Mydsn, { RaiseError => 0, PrintError => 1 } );
if ( ! $my_con ) {
warn "failed to connect to $host";
next;
}
}
在这种简单的情况下,next
当然是不必要的。也许您可以先检查服务器是否处于活动状态,类似于:
use IO::Socket::INET;
@arr_ =('host1','host2');
foreach $host (@arr_) {
$sk = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => '5432', # if postgres
Proto => 'tcp' );
if ($sk) {
my $my_connection = DBI->connect(@Mydsn, { RaiseError => 0, PrintError => 1 } )
or die("Fail to connect Database connection");
}
}
请提供代码和具体问题。您尝试了什么?@user356135:请阅读perl文档,特别是@user356135:它不需要next
,因为这是循环中的最后一个命令,因此它将自动进入下一个元素,而无需特别告知。