使用Mysql-bind实现mysql管理bind配置

bind默认都是用文件来管理zone的信息,通过mysql与bind的结合,可以使用mysql来进行管理,这样变更,添加将更加方便。

http://mysql-bind.sourceforge.net/docs.php

一、 安装Mysql
        因为后面需要使用mysql的头文件和库文件,所以我这边使用源码安装,当然,如果单独安装Headers and libraries应该也是可以的。
        1、下载mysql
        2、安装mysql,这个直接看INSTALL-SOURCE安装知道就可以了

 

     shell> groupadd mysql
     shell> useradd -g mysql mysql
     shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
     shell> cd mysql-VERSION
     shell> ./configure --prefix=/usr/local/mysql
     shell> make
     shell> make install
     shell> cp support-files/my-medium.cnf /etc/my.cnf
     shell> cd /usr/local/mysql
     shell> bin/mysql_install_db --user=mysql
     shell> chown -R root  .
     shell> chown -R mysql var
     shell> chgrp -R mysql .
     shell> bin/mysqld_safe --user=mysql &

        3、注意,这样安装好以后,我们的头文件和库文件分别在:
        /usr/local/mysql/include/mysql/        和         /usr/local/mysql/lib/mysql

二、安装bind和mysql-bind
        1、分别下载bindmysql-bind ,并解压
        2、mysql-bind里面主要有mysqldb.c和mysqldb.h两个文件,分别拷贝到bind源文件的bin/named和bin/named/include/named/目录
        3、编辑bind源文件目录的bin/named/Makefile.in文件,修改如下几个字段:

 

DBDRIVER_OBJS = mysqldb.@O @
DBDRIVER_SRCS = mysqldb.c
DBDRIVER_INCLUDES = -I'/usr/local/mysql/include/mysql/'
DBDRIVER_LIBS = -L'/usr/local/mysql/lib/mysql' -lmysqlclient -lz -lcrypt -lnsl -lm -lc -lnss_files -lnss_dns -lresolv -lc -lnss_files -lnss_dns -lresolv

        4、编辑bind源文件bin/named/main.c
                4.1、包含mysqldb.h,#include <named/mysqldb.h>
                4.2、在函数setup(void)里面ns_server_create()的前面添加mysqldb_init(),如

 

        /*
         * Add calls to register sdb drivers here.
         */
        /* xxdb_init(); */
        mysqldb_init();
        ns_server_create(ns_g_mctx, &ns_g_server);

                 4.3、在函数cleanup(void)里面ns_server_destroy()的后面添加mysqldb_clear(),如

 

        ns_server_destroy(&ns_g_server);
        mysqldb_clear();
        /*
         * Add calls to unregister sdb drivers here.
         */
        /* xxdb_clear(); */

        5、编译安装bind 

 

./configure
make
make install

三、配置
        1、启动named,第一次运行它提示找不到libmysqlclient.so.15,但是在mysql编译安装的时候已经生成了这个文件,于是手动拷贝他到/usr/lib/libmysqlclient.so.15,启动正常,可以解析所有域名。
        2、配置数据库
                2.1、创建数据库:create database test1;
                2.2、创建表:

 

CREATE TABLE mydomain (
  name varchar(255) default NULL,
  ttl int(11) default NULL,
  rdtype varchar(255) default NULL,
  rdata varchar(255) default NULL
) TYPE=MyISAM;

                2.3、添加测试数据

 

INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'SOA', 'mydomain.com. www.mydomain.com . 200309181 28800 7200 86400 28800');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns0.mydomain.com.');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'NS', 'ns1.mydomain.com.');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'MX', '10 mail.mydomain.com.');
INSERT INTO mydomain VALUES ('w0.mydomain.com', 259200, 'A', '192.168.1.1');
INSERT INTO mydomain VALUES ('w1.mydomain.com', 259200, 'A', '192.168.1.2');
INSERT INTO mydomain VALUES ('mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('mail.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('ns0.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('ns1.mydomain.com', 259200, 'Cname', 'w1.mydomain.com.');
INSERT INTO mydomain VALUES ('www.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');
INSERT INTO mydomain VALUES ('ftp.mydomain.com', 259200, 'Cname', 'w0.mydomain.com.');

        3、配置bind,其中dbname是数据库名,tablename是表名,hostname是mysql主机,然后就是用户名和密码

 

zone "mydomain.com" {
  type master;
  notify no;
  database "mysqldb dbname tablename hostname user password";
};

        4、重新启动bind,运行正常

四、用数据库管理bind,有一个很大的优点就是主域名CNAME功能,也就是空主机头别名问题。数据库的管理提供了一个松散的语法检查格式,我们配置了什么,就能解析出什么,一方面容易出错,另外一方面也带来了灵活性

此条目发表在article分类目录,贴了, , 标签。将固定链接加入收藏夹。