데이터베이스가 다시 시작될 때 segfaults가 발생하고 이전 연결을 사용하려고하면 webapp가 생깁니다. gdb --args apache -X
아래를 실행하면 다음과 같은 결과에 이르게 :mod_perl에서 MySQL 드라이버 segfaulting - 문제를 찾을 곳
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1212868928 (LWP 16098)]
0xb7471c20 in mysql_send_query() from /usr/lib/libmysqlclient.so.15
나는 드라이버와 데이터베이스가 모두 (DBD::mysql 4.0008, MySQL은 5.0.32-Debian_7etch6 로그) 최신 상태인지 확인했습니다.
성가 시게 나는 사소한 스크립트를 사용하여이 문제를 재현 할 수
use DBI;
use Test::More tests => 2;
my $dbh = DBI->connect("dbi:mysql:test", 'root');
sub test_db {
my ($number) = $dbh->selectrow_array("select 1 ");
return $number;
}
is test_db, 1, "connected to db";
warn "restart db now";
getc;
is test_db, 1, "connected to db";
을 다음주는 :이 요청이 실패한 이유를 말해 제대로 작동
ok 1 - connected to db
restart db now at dbd-mysql-test.pl line 23.
DBD::mysql::db selectrow_array failed: MySQL server has gone away at dbd-mysql-test.pl line 17.
not ok 2 - connected to db
# Failed test 'connected to db'
# at dbd-mysql-test.pl line 26.
# got: undef
# expected: '1'
.
무엇이 나를 괴롭히는가는 segfaulting이라는 것입니다. 앱이 실행될 때 (예 : DBIx::Class 사용) 발생하는 것처럼 보이기 때문에 테스트 케이스로 축소하는 것은 어렵습니다.
어디에서 디버깅을 시작해야합니까? 다른 사람이 본 적이 있습니까?
업데이트 : mod_perl에 속하는 것이 붉은 청어 였음을 보여줍니다. 간단한 테스트 스크립트로 축소하여 이제 DBI mailing list에 게시했습니다. 귀하의 답변에 감사드립니다.
아니요 - DBD :: mysql 또는 mysql 클라이언트 바이너리에 문제가있는 것으로 보입니다. 고마워요 :) – EvdB