標籤:bind+mysql
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 = [email protected]@
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中的#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‘);
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
運行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
####################################################################################
本文出自 “沙漠孤鷹” 部落格,請務必保留此出處http://yangji.blog.51cto.com/1155906/1732842
CentOS6系統bind9 + MySQL配置安裝