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 db. Но проблема в том, чтобы быть со всеми серверами и всеми версиями связывания.

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

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

1 ответ

Решение

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

Драйвер MySQL имеет одно дополнительное ограничение. MySQL использует локальное хранилище потоков в своем API. Таким образом, MySQL требует, чтобы каждый поток приложения выполнял "инициализацию потока" MySQL для настройки локального хранилища потока. Это невозможно сделать безопасно, оставаясь в API драйвера DLZ. Это ограничение вызвано MySQL, а не DLZ API. Из-за этого 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-сервер.

Другие вопросы по тегам