Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     09 Jan 2002  18:48:44
 To : Eugene Grosbein
 Subject : Re: mod_perl+MySQL=???
 -------------------------------------------------------------------------------- 
 
 Eugene Grosbein wrote:
 
 > Привет!
 > 
 > Почему может быть такое: prepare отрабатывает, а на execute говорит:
 > 
 > DBD::mysql::st execute failed: MySQL server has gone away at
 > /my/path/access.pl line 178. Причем этот mod_perl-скрипт работает уже
 > несколько лет нормально под Apache::DBI. Если отключаю Apache::DBI, то валится
 > ругань и ничего не работает (persistent connections мне приходится отрубать,
 > потому как нет возможности сказать, что для DBD::mysql их юзать, а для
 > DBD::ODBC нет, а тут надо, чтобы ODBC-коннекты закрывались сразу).
 Во-первых, внимательно перечитываем perldoc DBI:
 
 ...
             The "dbi_connect_method" attribute can be used to
             specify which driver method should be called to estabЅ
             lish the connection. The only useful values are 'conЅ
             nect', 'connect_cached', or some specialized case like
             'Apache::DBI::connect' (which is automatically the
             default when running within Apache).
 ...
 
 и делаем необходимые соединения не персистентными.
 > В логах самого MySQL ничего нету, свободных коннектов в MySQL тоже дофига.
 > 
 > Самое смешное - не могу найти эту ругань в тексте модулей.
 > 
 > Eugene
  
 Во-вторых, ищем это сообщение (MySQL server has gone away) в библиотеке
 
 от mysql. DBD::MySQL все-го лишь добавляет в какой строке какого
 
 файла/пакета это случилось. Выглядит так, как будто кто-то по ошибке
 
 закрыл соединение с sql сервером. Чаще всего такое случается если в
 скрипте был использован fork и в дочернем процессе оказалась копия
 объекта $dbh. Завершаясь, дочерний процесс вызвал деструктор этого
 объекта и он не просто захлопнул сокет, но и послал командочку sql-серверу
 на окончание сеанса. Это только предположение, но если оно верно, то
 читаем perldoc DBI еще раз:
 
         ""InactiveDestroy"" (boolean)
             This attribute can be used to disable the database
             engine related effect of DESTROYing a handle (which
             would normally close a prepared statement or disconЅ
             nect from the database etc).
 
             For a database handle, this attribute does not disable
             an explicit call to the disconnect method, only the
             implicit call from DESTROY.
 
             This attribute is specifically designed for use in
             Unix applications that "fork" child processes. Either
             the parent or the child process, but not both, should
             set "InactiveDestroy" on all their shared handles.
             Note that some databases, including Oracle, don't supЅ
             port passing a database connection across a fork.
 Андрей
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: mod_perl+MySQL=???   Andrey Sapozhnikov   09 Jan 2002 18:48:44 
Архивное /ru.cgi.perl/5284a98ce487.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional