Назад | Перейти на главную страницу

bind9 dlz / mysql в ubuntu segfault 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 минут. Ах, у меня есть ошибка.

Я временно решаю проблему с помощью простого сторожевого таймера процесса, и если названный таймер остановлен, сторожевой таймер перезапускает его, но это не очень хорошая идея в долгосрочной перспективе.

Мой вывод журнала:

Сообщения:

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). Эти серверы предназначены только для dns, обеспечивающих mysql server db. Но проблема в том, что все серверы и все версии привязки.

named.conf: http://pastebin.com/zwm1yP7V

Кто-нибудь может мне помочь, или какая-нибудь хорошая идея?

Проблема: (от http://bind-dlz.sourceforge.net/mysql_driver.html)

У драйвера MySQL есть одно дополнительное ограничение. MySQL использует локальное хранилище потоков в своем C api. Таким образом, MySQL требует, чтобы каждый поток приложения выполнял «инициализацию потока» MySQL для настройки локального хранилища потока. Это невозможно сделать безопасно, оставаясь в пределах API драйвера DLZ. Это ограничение вызвано MySQL, а не API DLZ. Из-за этого BIND ДОЛЖЕН работать только с одним потоком при использовании драйвера MySQL. Чтобы гарантировать, что BIND работает с одним потоком, пройдите «-n 1» в командной строке при запуске BIND (named). Это не должно быть ограничением для большинства систем UN * X, поскольку BIND обычно компилируется в однопоточном режиме (есть некоторые исключения). Даже если BIND скомпилирован для поддержки потоков, передача «-n 1» в командной строке приведет к тому, что он будет использовать один поток. Кроме того, если драйвер MySQL скомпилирован в BIND, но НЕ ИСПОЛЬЗУЕТСЯ, то "-n 1" не требуется. Параметры командной строки "-n 1" требуются только при ИСПОЛЬЗОВАНИИ драйвера MySQL.

РАЗРЕШИТЬ:

nano /etc/defaults/bind9

и измените эту строку:

# startup options for the server
OPTIONS="-u bind"

кому:

# startup options for the server
OPTIONS="-u bind -n 1"

перезапустите DNS-сервер.