Скрипт в репозитории zone2sql_perl_convert_bare_to_mysql.pl.
Прямая ссылка: http://fastvps.googlecode.com/svn/trunk/powerdns_zone_converter/zone2sql_perl_convert_bare_to_mysql.pl
Среда разработки и тестирования: Debian 6, в папке /etc/bind/ имеется named.conf и куча зон.
dpkg -l |grep pdns
ii pdns-backend-mysql 2.9.22-8+squeeze1 generic MySQL backend for PowerDNS
ii pdns-doc 2.9.22-8+squeeze1 PowerDNS manual
ii pdns-server 2.9.22-8+squeeze1 extremely powerful and versatile nameserver
Суть скрипта, берем команду:
zone2sql --on-error-resume-next=yes --named-conf=/etc/bind/named.conf --bare
Она парсит конфиг Bind и представялет его в виде удонбом для парсинга (парсить конфиг Bind самому - очень сложно, нужно учесть огромное множество моментов).
После этого, обрабатываем этот файл и делаем из него удобный для импорта sql файл, который генерируется идентично тому, что создает команда:
zone2sql --on-error-resume-next=yes --named-conf=/etc/bind/named.conf --gmysql
Зачем же, спросите Вы, плодить сущности? Это нужно потому что исправить генератор zone2sql (изменить способ создания зон, внести коррективы) почти нереалньо - он написан на сложном C++ c STL, владение которым обычно не значистя в списке умений системного администратора. А мой скрипт испарвить крайне легко! Так как это перл.
Тестирование работы скрипта и идентичности его результата работы тому, что генерирует gmysql.
Создаем папку:
mkdir var
Стягиваем скрипт по ссылке выше и даем ему право исполнения:
chmod +x zone2sql_perl_convert_bare_to_mysql.pl
Запускаем:
./zone2sql_perl_convert_bare_to_mysql.pl
Он выдаст примерно следующее:
Convert zones to raw file
Process raw data file to sql
Работает он весьма быстро, на 150 тысячах зон всего:
real 0m16.537s
user 0m14.945s
sys 0m1.515s
В итоге в папке var появятся три файла:
error.log - это лог команды zone2sql --bare, некритичные ошибки из него игнорируются автоматически
result_fastvps.sql - результирующий sql файл
zone2sql_raw.dat - bare файл, сгенерированный командой zone2sql.
Итак, сравним результат с тем, что делает zone2sql, для этого вызовем zone2sql:
zone2sql --on-error-resume-next=yes --named-conf=/etc/bind/named.conf --gmysql | sort > var/result_zone2sql.sql
cat var/result_fastvps.sql | sort > var/result_fastvps_sorted.sql
Сортировка необходима, так как парсеры генерируют немного в разной последовательности.
Сравним по md5:
md5sum var/result_zone2sql.sql
md5sum var/result_fastvps_sorted.sql
Будьте внимательны при тесте, чтобы содержимое зон не менялось.
Актуальная версия всегда в репозитории:
http://code.google.com/p/fastvps/wiki/zone2sql_Perl?ts=1351069503&updated=zone2sql_Perl