2016-08-18 10 views
1

Я изменил сценарий mysql_ от Munin, так что функция do_connect выглядит следующим образом:Почему Perl повторно использует одно и то же соединение MySQL в этом скрипте Munin?

sub db_connect { 
    my $dsn =  "$config{dsn};mysql_socket=$config{mysqlsocket};mysql_connect_timeout=5;"; 

    return DBI->connect($dsn, $config{user}, $config{password}, { 
     RaiseError  => 1, 
     PrintError  => 0, 
     FetchHashKeyName => 'NAME_lc', 
    }); 
} 

Я настроил plugins-conf установить различные значения для сокета отраженного в переменном окружении mysqlsocket. Таким образом, каждый экземпляр имеет свое значение для env.mysqlsocket. Когда я запускаю экземпляры с

$ for i in a b c; do munin-run mysql_${i}_innodb_rows; done 

то первый, который соединяет (a в таком порядке) открывает соединение, которое используется при последующих событиях, а не их гнезд. Строки подключения верны, они действительно меняются.

DBI->connect не выполнен. Я могу доказать это, установив имена файлов сокетов в несуществующие файлы; он снова использует одно и то же соединение.

Интересно, поскольку это независимые процессы символического скрипта.

Как я могу заставить свой скрипт Perl открывать новое соединение?

+0

@dorukayhan этого сценария Perl, а не PHP. – rexkogitans

ответ

0

Используйте инструкцию:

$dsn->disconnect; 
+0

Спасибо за подсказку; да, исходный код плагина пропускает этот момент, но я уже добавил его. Нет успеха. – rexkogitans

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - [Из обзора] (/ review/low-quality-posts/566802) –

 Смежные вопросы

  • Нет связанных вопросов^_^