当前位置:首页 > 文章列表 > 数据库 > MySQL > centso7 部署bind9.9.3+mysql5.6 实现A记录 通过修改数据库 来对多个域的域名进行解析

centso7 部署bind9.9.3+mysql5.6 实现A记录 通过修改数据库 来对多个域的域名进行解析

来源:SegmentFault 2023-02-25 09:12:09 0浏览 收藏

小伙伴们有没有觉得学习数据库很有意思?有意思就对了!今天就给大家带来《centso7 部署bind9.9.3+mysql5.6 实现A记录 通过修改数据库 来对多个域的域名进行解析》,以下内容将会涉及到MySQL、python3.x、bind,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

1.先安装MySQL,直接yum安装
* yum -y install mysql mysql-server

2.再安装一些依赖的包

  • yum -y install openssl openssl-devel libss-dev gcc gcc-c++ mysql-devel
  • yum install gcc libffi-devel python-devel openssl-devel mysql-devel -y
3.下载bind, bind官网(https://www.isc.org/)
4.下载mysql-bind 补丁源码
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 

#include "mysqldb.h"

#include 

#include 

#include  

    然后在注释代码段 /*  xxdb_init(); */ 后加入 mysqldb_init();

    在注释代码段 /*  xxdb_clear(); */后加入 mysqldb_clear();
9.修改mysqldb.c
  • 修改mysqldb.c中的#include 为 #include
10.安装bind

    ./configure --prefix=/usr/local/bind --enable-threads  # 指定安装目录和开启多线程的处理能力

    make

    make install
11.配置bind

    cd /usr/local/bind/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 

dig命令直接生成named.root文件

[root@silence etc]# ls
bind.keys  named.conf  named.root  rndc.conf  root.zone

[root@silence etc]# dig > named.root
[root@silence etc]# cat root.zone 
; > DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.4 >
;; global options: +cmd
;; Got answer:
;; ->>HEADER
  • named.conf

    [root@localhost etc]# cat named.root 
    
    ; > DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.4 >
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER

运行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

测试

image.png

[root@localhost etc]# /usr/local/bind/bin/dig -t A saas-cloud-dev.hbjj.com @172.16.197.63

; > DiG 9.9.3-P1 > -t A saas-cloud-dev.hbjj.com @172.16.197.63
;; global options: +cmd
;; Got answer:
;; ->>HEADER

配置原理

###################
 zone "hbjj.com" IN{
     type master;
     notify no;
     database "mysqldb mydomain test_mydomain_com_cn_outside 172.16.197.63 root xxxx";
#####################



                    
#####################     
zone "abc.com" IN {
    type master;
    file "/usr/local/named/etc/named.abc.com";
};     
     
$TTL 600
@               IN  SOA     master.abc.com. woodie.abc.com.( 2017022802 3H 15M 1W 1D )
@               IN  NS      master.abc.com.
master          IN  A       192.168.80.110
@               IN  MX  10  www.abc.com.
www             IN  A       192.168.80.121
bbs             IN  CNAME   www.abc.com.
ftp             IN  CNAME   www.abc.com.
linux           IN  CNAME   www.abc.com.
slave           IN  A       192.168.80.120
122             IN  A       192.168.80.122   
##################################
    
  • 两种模式是一个原理都必须配置 SOA, NS等 例:
    image.png

好了,本文到此结束,带大家了解了《centso7 部署bind9.9.3+mysql5.6 实现A记录 通过修改数据库 来对多个域的域名进行解析》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
MySQL|主从延迟问题排查(二)MySQL|主从延迟问题排查(二)
上一篇
MySQL|主从延迟问题排查(二)
MySQL 数据库集群-PXC 方案(二)
下一篇
MySQL 数据库集群-PXC 方案(二)
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    10次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    22次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    38次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码