我有一個web應用程序,當數據庫重新啓動並且它試圖使用舊連接時發生segfaults。 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'
這種行爲正確,告訴我請求失敗的原因。
什麼讓我感到遺憾的是,它是分割的,它不應該這樣做。由於它只在整個應用程序運行時纔會發生(使用DBIx::Class),因此很難將其降至測試用例。
我應該在哪裏開始調試呢?有沒有人看過這個?
UPDATE:進一步推動顯示它在mod_perl下是一個紅色的鯡魚。把它簡化爲一個簡單的測試腳本,我現在發佈到DBI mailing list。感謝您的回答。
否 - 它似乎是DBD :: mysql或mysql客戶端二進制文件的問題。謝謝,雖然:) – EvdB 2008-10-10 08:40:48