Export to GitHub

fastvps - zone2sql_Perl.wiki


Конвертер bind конфига в mysql на perl

Скрипт в репозитории 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 и представялет его в виде удонбом для парсинга (парсить конфиг Nginx самому - очень сложно, нужно учесть огромное множество моментов).

После этого, обрабатываем этот файл и делаем из него удобный для импорта 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_fastvps_sorted.sql var/result_zone2sql.sql ecd551e6c2da29da69e6782b46d229b9 var/result_fastvps_sorted.sql ecd551e6c2da29da69e6782b46d229b9 var/result_zone2sql.sql

Вуаяля! Все идентично.

Будьте внимательны при тесте, чтобы содержимое зон не менялось.