Если соединение с базой данных не удалось, попробуйте восстановить соединение - PullRequest
0 голосов
/ 14 марта 2011

Я новичок в Perl, у меня сценарий с массивом хостов, В цикле я создаю DNS и подключение к базе данных. Но если какой-либо хост не отвечает или не работает, то этот цикл получает разрыв и оставшийся хост не может подключиться, мой вопрос, как я могу пропустить это означает, что если какой-либо хост не может подключиться, то я хочу пропустить этот хост и хочу подключиться к другому ... Всем привет , Я новичок в Perl, у меня сценарий с массивом хоста.

В цикле я создаю DNS и подключение к базе данных. Но если какой-либо хост не отвечает или не работает, то этот цикл получает разрыв и оставшийся хост не может подключиться.

Мой вопрос: как я могу пропустить это? означает, что если какой-либо хост не может подключиться, то я хочу пропустить этот хост и хочу подключиться к другому ... Или попробуйте снова подключить этот хост ...

фрагмент кода приведен ниже

<code>
@arr_ =('host1','host2');
foreach $host (@arr_){
   @Mydsn =("dbi:mysql:$MYSQL_DATABASE:$host:$MYSQL_PORT","$MYSQL_USER","$MYSQL_PWD");<p></p>

<p>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</p>

<p>}

Пожалуйста, помогите мне! заранее спасибо Пожалуйста, помогите мне! Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

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, конечно, не нужно.

0 голосов
/ 15 марта 2011

Может быть, вы можете проверить, является ли сервер первым, что-то похожее на:

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");
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...