1.先装置MySQL,间接yum装置
* yum -y install mysql mysql-server

2.再装置一些依赖的包

  • yum -y install openssl openssl-devel libss-dev gcc gcc-c++ mysql-devel
3.下载bind, bind官网(https://www.isc.org/)
  • wget ftp://ftp.isc.org/isc/bind9/bind-9.10.3-P2/bind-9.10.3-P2.tar.gz
4.下载mysql-bind 补丁源码
  • wget http://nchc.dl.sourceforge.net/project/mysql-bind/mysql-bind/mysql-bind-0.2%20src/mysql-bind.tar.gz
5.解压bind和mysql-bind源码压缩文件
    tar zxvf bind-9.10.3-P2.tar.gz    tar zxvf mysql-bind.tar.gz
6.将mysql-bind源码目录下的mysqldb.c 和 mysqldb.h拷贝到bind源码目录下的bin/named和bin/named/include/ 目录下
    cd mysql-bind    cp -f mysqldb.c mysqldb.h ../bind-9.10.3-P2/bin/named/    cp -f mysqldb.c mysqldb.h ../bind-9.10.3-P2/bin/named/include/
7.批改bind源码目录下bin/named/Makefile.in文件
    cd ../bind-9.10.3-P2    vim bin/named/Makefile.in    将以下几行:      DBDRIVER_OBJS =                              DBDRIVER_SRCS =                              DBDRIVER_INCLUDES =                          DBDRIVER_LIBS =    批改为:    DBDRIVER_OBJS = mysqldb.@O@    DBDRIVER_SRCS = mysqldb.c    DBDRIVER_INCLUDES = -I/usr/include/mysql  -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC   -DUNIV_LINUX -DUNIV_LINUX    DBDRIVER_LIBS = -rdynamic -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -lssl -lcrypto    DBDRIVER_INCLUDES 的值是通过 mysql_config --cflags 命令获取的    DBDRIVER_LIBS 的值是通过 mysql_config --libs 命令获取的8.批改bind源码目录下bin/named目录下的main.c文件    vim bin/named/main.c    退出 #include "mysqldb.h"    如下:#include <config.h>#include "mysqldb.h"#include <ctype.h>#include <stdlib.h>#include <string.h>     而后在正文代码段 /*  xxdb_init(); */ 后退出 mysqldb_init();    在正文代码段 /*  xxdb_clear(); */后退出 mysqldb_clear();
9.批改mysqldb.c
  • 批改mysqldb.c中的#include <named/mysqldb.h>为 #include <include/mysqldb.h>
10.装置bind
    ./configure --prefix=/usr/local/bind --enable-threads  # 指定装置目录和开启多线程的解决能力    make    make install
11.配置bind
    cd /usr/local/bind-9.10/etc    /usr/local/bind/sbin/rndc-confgen -r /dev/urandom>rndc.conf    cat rndc.conf|tail |head -9 |sed "s/^#//g">named.conf   # 生成配置文件
12.创立一个数据库
############这版不太好用    Create database mydomain;    创立一张数据表    CREATE TABLE dnsrecord (       name varchar(255) default NULL,      ttl int(11) default NULL,       rdtype varchar(255) default NULL,      rdata varchar(255) default NULL )TYPE=MyISAM;    插入一些测试数据    INSERT INTO dnsrecord VALUES ('test.net', 259200, 'SOA', 'test.net.  www.test.net  200505101 28800 7200 86400 28800');    INSERT INTO dnsrecord VALUES ('test.net', 259200, 'NS', 'ns1.test.net.');    INSERT INTO dnsrecord VALUES ('ns1.test.net', 259200, 'A', '192.168.2.2');    INSERT INTO dnsrecord VALUES ('www.test.net', 259200, 'A', '192.168.2.1');
##########################好使###############################DROP TABLE IF EXISTS 10_outside;CREATE TABLE 10_outside ( name varchar(255) default NULL, ttl int(11) default NULL, rdtype varchar(255) default NULL, rdata varchar(255) default NULL);---- Dumping data for table `10_outside`--LOCK TABLES 10_outside WRITE;INSERT INTO 10_outside VALUES ('25.71.210.10.in-addr.arpa',3600,'PTR','cas1.test.mydomain.com.cn.');INSERT INTO 10_outside VALUES ('10.in-addr.arpa',3600,'SOA','test.mydomain.com.cn. zhengyu.staff.mydomain.com.cn. 20070319 1800 600 604800 600');INSERT INTO 10_outside VALUES ('10.in-addr.arpa',3600,'NS','cas1.test.mydomain.com.cn.');INSERT INTO 10_outside VALUES ('10.in-addr.arpa',3600,'NS','cas2.test.mydomain.com.cn.');INSERT INTO 10_outside VALUES ('10.in-addr.arpa',3600,'NS','cas3.test.mydomain.com.cn.');INSERT INTO 10_outside VALUES ('27.71.210.10.in-addr.arpa',3600,'PTR','cas2.test.mydomain.com.cn.');UNLOCK TABLES;---- Table structure for table `test_mydomain_com_cn_outside`--DROP TABLE IF EXISTS test_mydomain_com_cn_outside;CREATE TABLE test_mydomain_com_cn_outside ( name varchar(255) default NULL, ttl int(11) default NULL, rdtype varchar(255) default NULL, rdata varchar(255) default NULL);---- Dumping data for table `test_mydomain_com_cn_outside`--LOCK TABLES test_mydomain_com_cn_outside WRITE;INSERT INTO test_mydomain_com_cn_outside VALUES ('test.mydomain.com.cn',3600,'SOA','test.mydomain.com.cn. zhengyu.staff.mydomain.com.cn. 20070319 1800 600 604800 600');INSERT INTO test_mydomain_com_cn_outside VALUES ('test.mydomain.com.cn',3600,'NS','cas1.test.mydomain.com.cn.');INSERT INTO test_mydomain_com_cn_outside VALUES ('test.mydomain.com.cn',3600,'NS','cas2.test.mydomain.com.cn.');INSERT INTO test_mydomain_com_cn_outside VALUES ('test.mydomain.com.cn',3600,'NS','cas3.test.mydomain.com.cn.');INSERT INTO test_mydomain_com_cn_outside VALUES ('cas1.test.mydomain.com.cn',3600,'A','10.210.71.25');INSERT INTO test_mydomain_com_cn_outside VALUES ('cas2.test.mydomain.com.cn',3600,'A','10.210.71.27');INSERT INTO test_mydomain_com_cn_outside VALUES ('cas3.test.mydomain.com.cn',3600,'A','10.210.132.80');INSERT INTO test_mydomain_com_cn_outside VALUES ('yhzh.test.mydomain.com.cn',3600,'A','10.218.26.191');INSERT INTO test_mydomain_com_cn_outside VALUES ('yhzh.test.mydomain.com.cn',3600,'A','10.218.26.192');INSERT INTO test_mydomain_com_cn_outside VALUES ('yhzh.test.mydomain.com.cn',3600,'A','10.218.26.193');INSERT INTO test_mydomain_com_cn_outside VALUES ('yhzh.test.mydomain.com.cn',3600,'A','10.218.26.194');INSERT INTO test_mydomain_com_cn_outside VALUES ('*',3600,'A','10.210.71.1');INSERT INTO test_mydomain_com_cn_outside VALUES ('conf.test.mydomain.com.cn',3600,'CNAME','cas2.test.mydomain.com.cn.');UNLOCK TABLES;############################################
13.持续配置bind 
vim /usr/local/bind/etc/named.conf在前面依照以下格局退出zone "mydomain.com" {    type master;    notify no;     database "mysqldb dbname tablename hostname user password"; };mydomain.com为要解析的域名dbname 为数据库名hostname为数据库服务器地址user 为可操作后面数据库表的数据库用户名password 为对应数据库用户名的明码配置实现在命令行下运行/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf -g查看没问题后/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf 
[root@silence etc]# lsbind.keys  named.conf  named.root  rndc.conf  root.zone[root@silence etc]# cat root.zone $TTL  86400@                 IN             SOA           ns1.mydomain.com.       w1.mydomain.com (                                                        2018070110                                                        1H                                                         5M                                                         7D                                                         1D)                      IN               NS            ns1                      IN               NS            ns2                      IN               MX   10     mx1                      IN               MX    20    mx2ns1               IN                A              192.168.108.160ns2               IN                A              192.168.108.138ns3               IN                A              192.168.108.166mx1              IN                A              192.168.108.138w1              IN                A              192.168.1.2w0              IN                A              192.168.1.1www             IN                A              192.168.108.160*                  IN                A               192.168.108.166[root@silence etc]# cat named.conf  key "rndc-key" {     algorithm hmac-md5;     secret "ZYobWCcSDr2HDCMuojc6gg=="; };  controls {     inet 127.0.0.1 port 953         allow { 127.0.0.1; } keys { "rndc-key"; }; };options {     listen-on port 53 { 127.0.0.1;172.16.188.123; };     directory "/data/work/bind9.9.3";     allow-query-cache { any; };     allow-query   { any; };     dnssec-enable yes;     dnssec-validation yes;     dnssec-lookaside auto; }; zone "." {      type hint;      file "/data/work/bind9.9.3/etc/root.zone";  }; zone "mydomain" {    type forward;        forwarders { 114.114.114.114;8.8.8.8; };    forward first; }; logging {        channel bind_log {                file "/data/work/bind9.9.3/logs/bind.log" versions 3 size 20m;                severity info;                print-time yes;                print-severity yes;                print-category yes;        };        category default {                bind_log;        }; }; zone "test.mydomain.com.cn" IN{      type master;     notify no;     database "mysqldb mydomain test_mydomain_com_cn_outside 172.16.188.123 root 111111";  }; zone "16.172.in-addr.arpa" IN{     type master;     notify no;     database "mysqldb mydomain 10_outside 172.16.188.123 root 111111"; };

运行bind

写入零碎服务

vim /etc/init.d/named#####################################################################!/bin/bash    #    # description: named daemon  形容信息    # chkconfig: - 25 88    启动和敞开级别    #    # 启动named的pid文件、其实文件门路咱们都能够本人指定的    pidFile=/usr/local/bind/var/run/named.pid    # 启动服务时的锁文件、判断一个服务是不是启动是靠这个锁文件的    lockFile=/var/lock/subsys/named    # named的配置文件门路    confFile=/usr/local/bind/etc/named.conf    # 判断/etc/rc.d/init.d/functions门路下的functios是否存在这个文件、存在就sources进来    [ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions    # 定义启动办法    start() {            # 判断锁文件是否存在、如果存在就说服务曾经启动并退出            if [ -e $lockFile ]; then                echo "named is already running..."                exit 0            fi            # 打印服务曾经启动的信息            echo -n "Starting named:"            # 调用functions中的daemon办法、并用--pidfile指定pid文件在什么中央、还指定用户和配置文件、咱们原本是间接启用named的、当初利用daemon这个函数来启用这个服务、他会取得很多额定的属性、如果胜利了会帮咱们打印什么[ OK ]的、还能够做判断            daemon --pidfile "$pidFile" /usr/local/bind/sbin/named -c "$confFile"            RETVAL=$?            echo            # 判断下面的命令是否执行胜利、阐明启动胜利            if [ $RETVAL -eq 0 ]; then                    # 如果判断胜利、就创立锁文件                    touch $lockFile                    return $RETVAL            else                    # 否则、就是失败了、那就删除锁文件和pid文件                    rm -f $lockFile $pidFile                    return 1            fi    }    # 定义进行办法    stop() {            # 如果锁文件不存在            if [ ! -e $lockFile ]; then                    # 阐明服务还没有启动                    echo "named is stopped."            fi            echo -n "Stopping named:"            killproc named            RETVAL=$?            echo            # 判断以上的命令是否执行进行胜利、如果胜利            if [ $RETVAL -eq 0 ];then                    # 删除锁文件和pid文件                    rm -f $lockFile $pidFile                    return 0            else                    # 否则打印说没能失常进行                    echo "Cannot stop named."                    # 调用functions中的函数、会打印失败                    failure                    return 1            fi    }    # 定义重启服务    restart() {            # 调用进行办法            stop            # 睡眠2秒            sleep 2            # 调用启动办法            start    }    # 定义从新加载服务办法    reload() {            echo -n "Reloading named: "            # killprco HUP信号、named过程的信号            killproc named -HUP            RETVAL=$?            echo            return $RETVAL    }    # 定义服务状态    status() {            if pidof named &> /dev/null; then                    echo -n "named is running..."                    success                    echo            else                    echo -n "named is stopped..."                    success                    echo            fi    }    # 定义谬误提示信息    usage() {            echo "Usage: named {start|stop|restart|status|reload}"    }    case $1 in    start)            start ;;    stop)            stop ;;    restart)            restart ;;    status)            status ;;    reload)            reload ;;    *)            usage            exit 4 ;;    esac

测试

[root@silence ~]# nslookup cas1.test.mydomain.com.cnServer:        172.16.188.123Address:    172.16.188.123#53Name:    cas1.test.mydomain.com.cnAddress: 10.210.71.25[root@silence ~]# /data/work/bind9.9.3/bin/dig -t A cas1.test.mydomain.com.cn @172.16.188.123; <<>> DiG 9.9.3-P1 <<>> -t A cas1.test.mydomain.com.cn @172.16.188.123;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10127;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3;; OPT PSEUDOSECTION:; EDNS: version: 0, flags:; udp: 4096;; QUESTION SECTION:;cas1.test.mydomain.com.cn.    IN    A;; ANSWER SECTION:cas1.test.mydomain.com.cn. 3600    IN    A    10.210.71.25;; AUTHORITY SECTION:test.mydomain.com.cn.    3600    IN    NS    cas1.test.mydomain.com.cn.test.mydomain.com.cn.    3600    IN    NS    cas2.test.mydomain.com.cn.test.mydomain.com.cn.    3600    IN    NS    cas3.test.mydomain.com.cn.;; ADDITIONAL SECTION:cas2.test.mydomain.com.cn. 3600    IN    A    10.210.71.27cas3.test.mydomain.com.cn. 3600    IN    A    10.210.132.80;; Query time: 3 msec;; SERVER: 172.16.188.123#53(172.16.188.123);; WHEN: Wed Nov 25 16:37:23 CST 2020;; MSG SIZE  rcvd: 154[root@silence ~]# cat /etc/resolv.conf# Generated by NetworkManagernameserver 172.16.188.123