Bind with mysql backend

Mike Ragusa mragusa at gmail.com
Thu Mar 6 20:45:34 UTC 2008


This is the configuration I am using now. I finally got zone transfers
working and all of my data imported and working properly.
mysql> show tables;
+---------------+
| Tables_in_dns |
+---------------+
| data_count    |
| dns_records   |
| xfr_table     |
+---------------+
3 rows in set (0.00 sec)

mysql> describe dns_records;
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| zone        | text     | YES  | MUL | NULL    |       |
| host        | text     | YES  | MUL | NULL    |       |
| type        | text     | YES  | MUL | NULL    |       |
| data        | text     | YES  |     | NULL    |       |
| ttl         | char(4)  | NO   |     | 3600    |       |
| mx_priority | char(4)  | YES  |     | NULL    |       |
| refresh     | char(11) | YES  |     | NULL    |       |
| retry       | char(11) | YES  |     | NULL    |       |
| expire      | char(11) | YES  |     | NULL    |       |
| minimum     | char(11) | YES  |     | NULL    |       |
| serial      | char(20) | YES  |     | NULL    |       |
| resp_person | text     | YES  |     | NULL    |       |
| primary_ns  | text     | YES  |     | NULL    |       |
+-------------+----------+------+-----+---------+-------+
13 rows in set (0.01 sec)

mysql> describe xfr_table;
+--------+------+------+-----+---------+-------+
| Field  | Type | Null | Key | Default | Extra |
+--------+------+------+-----+---------+-------+
| zone   | text | YES  | MUL | NULL    |       |
| client | text | YES  | MUL | NULL    |       |
+--------+------+------+-----+---------+-------+
2 rows in set (0.00 sec)

This is my named.conf SQL statements which i grabbed from the DLZ site.
dlz "Mysql zone" {
   database "mysql
   {host=localhost dbname=dns user=dns pass=bind-dlz-test}
   {select zone from dns_records where zone = '%zone%'}
   {select ttl, type, mx_priority, case when lower(type)='txt' then
concat('\"', data, '\"')
        when lower(type) = 'soa' then concat_ws(' ', data, resp_person,
serial, refresh, retry, expire, minimum)
        else data end from dns_records where zone = '%zone%' and host =
'%record%'}
   {}
   {select ttl, type, host, mx_priority, case when lower(type)='txt' then
        concat('\"', data, '\"') else data end, resp_person, serial,
refresh, retry, expire,
        minimum from dns_records where zone = '%zone%'}
   {select zone from xfr_table where zone = '%zone%' and client =
'%client%'}";
};


I am currently in the process of writing up a howto for freebsd and
including my scripts i used for data importation and what not. What i would
like to know right now is:
1. What GUI or command line interface do people use to manage the data
inside of bind-dlz?
2. Can bind-dlz take advantage of zone options?
3. Does bind-dlz understand views?

Thanks
Mike.


On Tue, Mar 4, 2008 at 4:14 PM, Graham Weldon <graham at fluidlino.com.au>
wrote:

>  I am personally using a non-standard DB Structure, although its closely
> modelled off the sample one.
> Reason for doing this alternate version is to bring the database structure
> in line with naming conventions for CakePHP, to ensure we can manage the
> data within the database easily, and in a useful manner.
>
> mysql> show tables;
> +---------------------+
> | Tables_in_dns       |
> +---------------------+
> | dns_queries         |
> | dns_query_summaries |
> | dns_records         |
> | dns_transfers       |
> | dns_zones           |
> +---------------------+
> 8 rows in set (0.00 sec)
>
> mysql> desc dns_zones;
> +-------------+------------------+------+-----+---------+----------------+
> | Field       | Type             | Null | Key | Default | Extra          |
> +-------------+------------------+------+-----+---------+----------------+
> | id          | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
> | domain_id   | int(11)          | NO   |     | NULL    |                |
> | domain_name | varchar(255)     | NO   | MUL | NULL    |                |
> +-------------+------------------+------+-----+---------+----------------+
> 3 rows in set (0.00 sec)
>
> mysql> desc dns_records;
>
> +-------------+---------------------+------+-----+---------------------+----------------+
> | Field       | Type                | Null | Key | Default             |
> Extra          |
>
> +-------------+---------------------+------+-----+---------------------+----------------+
> | id          | int(11) unsigned    | NO   | PRI | NULL                |
> auto_increment |
> | dns_zone_id | int(11) unsigned    | NO   | MUL | NULL
> |                |
> | ttl         | int(11) unsigned    | NO   |     | 21600
> |                |
> | type        | varchar(10)         | NO   |     | NULL
> |                |
> | host        | varchar(255)        | NO   |     | @
> |                |
> | mx_priority | int(11) unsigned    | YES  |     | NULL
> |                |
> | data        | text                | YES  |     | NULL
> |                |
> | contact     | varchar(255)        | YES  |     | NULL
> |                |
> | serial      | bigint(20) unsigned | YES  |     | NULL
> |                |
> | refresh     | int(11) unsigned    | YES  |     | NULL
> |                |
> | retry       | int(11) unsigned    | YES  |     | NULL
> |                |
> | expire      | int(11) unsigned    | YES  |     | NULL
> |                |
> | minimum     | int(11) unsigned    | YES  |     | NULL
> |                |
> | updated     | timestamp           | NO   |     | 0000-00-00 00:00:00
> |                |
>
> +-------------+---------------------+------+-----+---------------------+----------------+
> 14 rows in set (0.00 sec)
>
> mysql> desc dns_queries;
>
> +-------------+------------------+------+-----+-------------------+----------------+
> | Field       | Type             | Null | Key | Default           |
> Extra          |
>
> +-------------+------------------+------+-----+-------------------+----------------+
> | id          | int(11) unsigned | NO   | PRI | NULL              |
> auto_increment |
> | domain_name | varchar(255)     | NO   |     | NULL
> |                |
> | timestamp   | timestamp        | NO   |     | CURRENT_TIMESTAMP
> |                |
>
> +-------------+------------------+------+-----+-------------------+----------------+
> 3 rows in set (0.00 sec)
>
> mysql> desc dns_transfers;
> +-------------+------------------+------+-----+---------+----------------+
> | Field       | Type             | Null | Key | Default | Extra          |
> +-------------+------------------+------+-----+---------+----------------+
> | id          | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
> | dns_zone_id | int(11) unsigned | NO   | MUL | NULL    |                |
> | client      | int(11) unsigned | NO   | MUL | NULL    |                |
> +-------------+------------------+------+-----+---------+----------------+
> 3 rows in set (0.01 sec)
>
> And finally, my DLZ config... (coloured to match the coloring used on the
> MySQL section of the DLZ website
> ---------------------------
> dlz "MySQL Zone" {
>         database "mysql
>         {host=localhost dbname=dns_db user=dns_user pass=dns_pass}
>         {SELECT DISTINCT 'DOMAIN_EXISTS' FROM `dns_zones` WHERE
> `domain_name` = '%zone%'}
>         {SELECT `ttl`,`type`,`mx_priority`,IF (`type` = 'TXT',
> concat('\"', `data`, '\"'), `data`) FROM `dns_records` LEFT JOIN `dns_zones`
> ON `dns_records`.`dns_zone_id` = `dns_zones`.`id` WHERE
> `domain_name`='%zone%' AND `host`='%record%' AND NOT (`type`='SOA' OR
> `type`='NS')}
>         {SELECT
> `ttl`,`type`,`mx_priority`,`data`,`contact`,`serial`,`refresh`,`retry`,`expire`,`minimum`
> FROM `dns_records` LEFT JOIN `dns_zones` ON
> `dns_records`.`dns_zone_id`=`dns_zones`.`id` WHERE `domain_name`='%zone%'
> AND (`type`='SOA' OR `type`='NS') ORDER BY `type` DESC}
>         {SELECT `ttl`,`type`,`mx_priority`,IF (`type` = 'TXT',
> concat('\"', `data`, '\"'),
> `data`),`contact`,`serial`,`refresh`,`retry`,`expire`,`minimum` FROM
> `dns_records` LEFT JOIN `dns_zones` ON
> `dns_records`.`dns_zone_id`=`dns_zones`.`id` WHERE `domain_name`='%zone%'
> AND NOT (`type`='SOA' OR `type`='NS')}
>         {SELECT DISTINCT 'ALLOW_TRANSFER' FROM `dns_transfers` LEFT JOIN
> `dns_zones` ON `dns_transfers`.`dns_zone_id` = `dns_zones`.`id` WHERE
> `domain_name`='%zone%' AND `client`='%client%'}
>         {INSERT INTO `dns_queries` SET `domain_name`='%zone%'}";
> };
> ---------------------------
>
>
> Cheers,
>
> Graham Weldon
>
> *Fluid Lino
> *(02) 4927 5337
> (0407) 017 293
> graham at fluidlino.com.au
> www.fluidlino.com.au
>
>
>  ------------------------------
> *From:* bind-dlz-testers-bounces at lists.sourceforge.net [mailto:
> bind-dlz-testers-bounces at lists.sourceforge.net] *On Behalf Of *Mike Ragusa
> *Sent:* Wednesday, 5 March 2008 3:25 AM
> *To:* bind-users at isc.org; bind-dlz-testers at lists.sourceforge.net
> *Subject:* [Bind-dlz-testers] Bind with mysql backend
>
> I have been using the default schema with bind-dlz and mysql as noted on
> their website. I was wondering what people use to manage this information
> and if they used another database schema that offered better performance or
> ablity to manage the data better.
>
> Default Schema:
> +-------------+------------+------+-----+---------+-------+
> | Field       | Type       | Null | Key | Default | Extra |
> +-------------+------------+------+-----+---------+-------+
> | zone        | text       | YES  | MUL | NULL    |       |
> | host        | text       | YES  | MUL | NULL    |       |
> | type        | text       | YES  | MUL | NULL    |       |
> | data        | text       | YES  |     | NULL    |       |
> | ttl         | int(11)    | NO   |     | 3600    |       |
> | mx_priority | text       | YES  |     | NULL    |       |
> | refresh     | int(11)    | YES  |     | NULL    |       |
> | retry       | int(11)    | YES  |     | NULL    |       |
> | expire      | int(11)    | YES  |     | NULL    |       |
> | minimum     | int(11)    | YES  |     | NULL    |       |
> | serial      | bigint(20) | YES  |     | NULL    |       |
> | resp_person | text       | YES  |     | NULL    |       |
> | primary_ns  | text       | YES  |     | NULL    |       |
> +-------------+------------+------+-----+---------+-------+
>
>
> Default MySQL for named.conf:
>
> dlz "Mysql zone" {
>    database "mysql
>    {host=localhost dbname=dns user=dns pass=bind-dlz-test}
>    {select zone from dns_records where zone = '%zone%'}
>    {select ttl, type, mx_priority, case when lower(type)='txt' then
> concat('\"', data, '\"')
>         when lower(type) = 'soa' then concat_ws(' ', data, resp_person,
> serial, refresh, retry, expire, minimum)
>         else data end from dns_records where zone = '%zone%' and host =
> '%record%'}
>    {}
>    {select ttl, type, host, mx_priority, case when lower(type)='txt' then
>         concat('\"', data, '\"') else data end, resp_person, serial,
> refresh, retry, expire,
>         minimum from dns_records where zone = '%zone%'}
>    {select zone from xfr_table where zone = '%zone%' and client =
> '%client%'}";
> };
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> Bind-dlz-testers mailing list
> Bind-dlz-testers at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bind-dlz-testers
>
>




More information about the bind-users mailing list