Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如果数据库连接失败,请尝试重新连接_Perl - Fatal编程技术网

Perl 如果数据库连接失败,请尝试重新连接

Perl 如果数据库连接失败,请尝试重新连接,perl,Perl,我是perl的新手,我的场景是有一个主机数组, 在一个循环中,我创建DNS并连接到数据库。 但是,如果任何主机没有响应或停机,那么该循环就会中断 而剩余的主机无法连接,我的问题是如何跳过该操作 意味着如果任何主机无法连接,那么我想跳过该主机并与另一台主机连接。。。 大家好, 我是perl的新手,我的场景是我有一个主机数组。 在一个循环中,我创建DNS并连接到数据库。 但是,如果任何主机没有响应或停机,那么该循环就会中断 而剩余的主机无法连接。我的问题是如何跳过该操作 意味着如果任何主机无法连接,

我是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
,因为这是循环中的最后一个命令,因此它将自动进入下一个元素,而无需特别告知。