虽然不是干运维的,但在IT江湖打酱油也难免受到高人的影响,所以在很早就听说bind可以和数据结合使用,一直都没有时间去研究;今天恰好一个同事问到bind安装的问题,就顺便研究了一下;下面将我的操作过程共享个各位,期间查找了不少网络上的资料,在这里感谢他们。好了,下面开始我们正题,欢迎各位轻轻的拍砖,哈哈哈……。


软件准备:(本人环境)

Centos6.2

Mysqlbind-9.3.2.tar.gzmysql-bind.tar.gz


备注:9.4.2以上版本都已经包含了DLZ补丁,本人认为就不需要mysql_bind这个驱动了,有关操作请查阅相关参考资料,这里不讨论。

安装篇

一、安装Mysql

因为后面需要使用mysql的头文件和库文件,所以我这边使用源码安装,当然,如果单独安装Headers and libraries应该也是可以的。

1、解压mysql


2、安装mysql,这个直接看INSTALL-SOURCE安装知道就可以了,这里简单过一下。

~]#groupadd mysql

~]#useradd -g mysql mysql

~]#gunzip < mysql-VERSION.tar.gz | tar -xvf -

~]#cd mysql-VERSION

~]#./configure --prefix=/usr/local/mysql

~]#make

~]#make install

~]#cp support-files/my-medium.cnf /etc/my.cnf

~]#cd /usr/local/mysql

~]#bin/mysql_install_db --user=mysql

~]#chown -R root

~]#chown -R mysql var

~]#chgrp -R mysql

~]#bin/mysqld_safe --user=mysql &

具体查看Mysql的想安装过程。


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

/usr/local/mysql/include/mysql//usr/local/mysql/lib/mysql

其实使用rpm安装也是可以的,安装成是使用相关命令查找到需要的这两个文件目录即可


二、分别解压mysql-bind.tar.gz和bind-9.3.2.tar.gz

1、将mysql-bind.tar.gz解压,生成文件夹mysql-bind


2、将bind-9.3.2.tar.gz 解压,生成文件夹bind-9.3.2


3、将mysql-bind里面主要有mysqldb.cmysqldb.h两个文件,分别拷贝到bind源文件的bin/namedbin/named/include/named/目录下


4、编辑bind源文件目录的bin/named/Makefile.in文件,修改如下几个字段:

DBDRIVER_OBJS = mysqldb.@O@

DBDRIVER_SRCS = mysqldb.c

DBDRIVER_INCLUDES = -I'/usr/local/mysql/include/mysql/'   #mysql安装3的内容

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


5、编辑bind源文件bin/named/main.c

5.1、在main.c开头包含mysqldb.h#include <named/mysqldb.h>

5.2、在main.c文件中的函数setup(void)里面ns_server_create()的前面添加mysqldb_init();

5.3、在函数cleanup(void)里面ns_server_destroy()的后面添加mysqldb_clear();

备注:相关区域会有提示信息


6、编译安装bind 

~]#./configure --prefix=/usr/local/named

程序将安装到/usr/local/named/

还有其他选项可以选择使用:

--enable-threads:开启多线程处理能力

--disable-openssl-version-check:禁止openssl版本的检查

--enable-largefile:启用大文件支持

--disable-ipv6:关闭ipv6支持

~]#make

~]#make install


配置篇

7、生成etc中相关配置文件;

通过上面完成编译安装后,在程序的安装目录/usr/local/named中发现没有etc文件夹,更没有本应该放在其下的rndc.confnamed.conf配置文件,我们通过一些方法生成这两个重要的文件。


7.1、在named目录下建立etc文件夹;

~]#mkdir etc


7.2、生成rndc.conf文件

~]#sbin/rndc-confgen -r /dev/urandom >  rndc.conf


7.3、生成name.conf文件

rndc.conf文件拷贝一份,命名为name.conf

使用vim编辑name.conf

文件中有提示语:

# Use with the following in named.conf, adjusting the allow list as needed:

按照提示,将该提示以上的(没有被注释的部分)全部删除或注释掉,将其下的被注释信息全部取消注释;


7.4、生成rndc.key文件(该文件貌似没用,可以在启动时提示需要改文件是建立)

~]#rndc-confgen  -r  /dev/urandom  -a

(自动生成到namedetc目录下)

更权限:

~]#chomd 644 rndc.key


备注:在RHEL6上没有caching-named这个包,所以在上面命令中用/dev/urandom构建了一个虚拟的随机数生成器。


8、配置数据信息:

8.1、创建数据库:create database mydomain ;


8.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;


8.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.');

 

9、配置bind连接数据

使用vim编辑name.conf文件,在底端追加写入数据信息:

zone "mydomain.com" {

  type    master;

  notify   no;

  database "mysqldb dbname tablename hostname user password";

};

mydomain.com为要解析的域名,本例为插入数据库的mydomain.comt域名 

dbname 为数据库名本例为mydomain,

tablename为数据表名,本例为mydomain

hostname为数据库服务器地址,本例为本机127.0.0.1 

user 为可操作前面数据库表的数据库用户名,本例为root 

password 为对应数据库用户名的密码,本例为 123456 


10、测试服务程序

打开named测试/usr/local/named/sbin/named -g -d 1 -c /usr/local/named/etc/named.conf

或者直接 ./named  -g

如果没有出现错误信息说明安装基本正常,这是可以真正启动bind服务,用一台pcDNS指向该服务器ping数据库中一个域名验证一下。


11、正常启动服务

/usr/local/named/sbin/named


备注:

1、启动named,第一次运行它如果提示找不到libmysqlclient.so.15,这个文件是在mysql编译安装的时候已经生成了这个文件,可以手动拷贝他到/usr/lib/libmysqlclient.so.15,启动正常,可以解析所有域名。

2、如果启动时提示/usr/local/named/var/run/named.pid有问题,那么就手动在named下建立一个var/run/路径;

3、如果是服务器自身使用ping命令来验证,那么必须把服务器的DNS指向本机;即,编辑文件/etc/resolve..conf

search    localdomain

nameserver 127.0.0.1

4、网上有关文章有建立mysqlbind系统专用用户的操作,本文没有涉及相关内容,如需要建立请移步相关网站查询。


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

 

主要参考资料:

1.http://www.xiaobo.li/article/81.html

2.http://blog.csdn.net/edmond999/article/details/4301585

3.http://wenku.baidu.com/link?url=jdSvvXyvLRtRyGMAkl5qwcQUQSh4WXQaoMR3XljmbLV_AK1O6jmC_xWoiGbcuKJjDVuuQ6HG52JNacQE8Gd2wJ-A5NZV1gZkmJDna7bT-Va

4.http://www.2cto.com/os/201304/199503.html