bind9 dlz/mysql 在 ubuntu 段錯誤 libmysqlclient.so
我有一個大問題。我將 bind9 名稱伺服器安裝到三台不同的電腦上。兩個 Ubuntu 10.04.4 LTS 和一個 Ubuntu 11.10
我用這個方法編譯了9.7.0、9.7.3、9.9.0:
./configure --prefix=/usr --sysconfdir=/etc/bind --localstatedir=/var \ --mandir=/usr/share/man --infodir=/usr/share/info \ --enable-threads --enable-largefile --with-libtool --enable-shared --enable-static \ --with-openssl=/usr --with-gssapi=/usr --with-gnu-ld \ --with-dlz-mysql=yes --with-dlz-bdb=no \ --with-dlz-filesystem=yes --with-geoip=/usr make make install
為 dlz/mysql 設置後,BIND 伺服器正常工作,直到 5-30 分鐘。我得到了段錯誤。
我用一個簡單的程序看門狗暫時解決了這個問題,如果命名停止,看門狗會重新啟動它,但這在 long therm 中不是一個好主意。
我的日誌輸出是:
留言:
Apr 13 19:33:51 dnsvm kernel: [ 8.088696] eth0: link up Apr 13 19:33:58 WATCHDOG: named not running. Restarting Apr 13 19:35:08 dnsvm kernel: [ 87.082572] named[1027]: segfault at 88 ip b71c4291 sp b5adfe30 error 4 in libmysqlclient.so.16.0.0[b714e000+1aa000] Apr 13 19:35:08 WATCHDOG: named not running. Restarting Apr 13 19:35:08 dnsvm kernel: [ 87.457510] named[1423]: segfault at 68 ip b71d6122 sp b52f0a40 error 4 in libmysqlclient.so.16.0.0[b7160000+1aa000] Apr 13 19:35:09 WATCHDOG: named not running. Restarting Apr 13 19:41:56 dnsvm kernel: [ 494.838206] named[1448]: segfault at 88 ip b731c291 sp b5436e30 error 4 in libmysqlclient.so.16.0.0[b72a6000+1aa000] Apr 13 19:41:57 WATCHDOG: named not running. Restarting Apr 13 19:57:26 dnsvm kernel: [ 1424.023409] named[2976]: segfault at 88 ip b72d1291 sp b6beee30 error 4 in libmysqlclient.so.16.0.0[b725b000+1aa000] Apr 13 19:57:26 WATCHDOG: named not running. Restarting Apr 13 20:11:56 dnsvm kernel: [ 2294.324663] named[6441]: segfault at 88 ip b7357291 sp b6473e30 error 4 in libmysqlclient.so.16.0.0[b72e1000+1aa000] Apr 13 20:11:57 WATCHDOG: named not running. Restarting
系統日誌: http: //pastebin.com/hjUyt8gN
第一個伺服器是本機的普通 x64 伺服器(u1004lts),第二個是虛擬化伺服器(u11.10)第三個也是虛擬化的(10.04lts) 此伺服器僅用於提供 mysql 伺服器 db 的 dns。但問題在於所有伺服器和所有綁定版本。
命名的.conf:http : //pastebin.com/zwm1yP7V
任何人都可以幫助我,或者有什麼好主意嗎?
問題:(來自http://bind-dlz.sourceforge.net/mysql_driver.html)
MySQL 驅動程序有一個額外的限制。MySQL 在其 C api 中使用執行緒本地儲存。因此 MySQL 要求應用程序的每個執行緒都執行 MySQL“執行緒初始化”來設置執行緒本地儲存。留在 DLZ 驅動程序 API 中時,這是不可能安全地完成的。這是由 MySQL 而不是 DLZ API 引起的限制。因為這個 BIND 在使用 MySQL 驅動程序時必須只執行一個執行緒。為了確保 BIND 以單執行緒執行,在啟動 BIND(命名)時在命令行上傳遞“-n 1”。這不應該成為大多數 UN*X 系統的限制,因為 BIND 通常是單執行緒編譯的(有一些例外)。即使 BIND 被編譯為支持在命令行上傳遞“-n 1”的執行緒,也會導致它使用單個執行緒。還,如果 MySQL 驅動程序編譯為 BIND 但未使用,則不需要“-n 1”。只有在使用 MySQL 驅動程序時才需要“-n 1”命令行參數。
解決:
nano /etc/defaults/bind9
並更改此行:
# startup options for the server OPTIONS="-u bind"
到:
# startup options for the server OPTIONS="-u bind -n 1"
重新啟動 DNS 伺服器。