powerDNS 数据库表记录简要说明

本文详细介绍了如何通过数据库连接方法获取域名信息,并展示了如何在数据库中添加和更新域名记录,以及验证DNS解析的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库连接方法

[root@gd02-qa-plxt2-nodomain /]# mysql -u vipdns -pvipdns -h 10.0.3.99

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| pdns               |
+--------------------+
2 rows in set (0.00 sec)

注:
-u 指定用户名 (vipdns)
-p 指定密码 (vipdns)
-h 指定主机 (10.0.3.99)
默认端口 3306

表信息

mysql> show tables;
+--------------------+
| Tables_in_pdns     |
+--------------------+
| cryptokeys         |
| domainmetadata     |
| domains            |
| perm_items         |
| perm_templ         |
| perm_templ_items   |
| records            |
| supermasters       |
| tsigkeys           |
| users              |
| zone_templ         |
| zone_templ_records |
| zones              |
+--------------------+
13 rows in set (0.00 sec)

重点关注: domain 表 records 表

 

domain 表结构

mysql> desc domains;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| name            | varchar(255) | NO   | UNI | NULL    |                |
| master          | varchar(128) | YES  |     | NULL    |                |
| last_check      | int(11)      | YES  |     | NULL    |                |
| type            | varchar(6)   | NO   |     | NULL    |                |
| notified_serial | int(11)      | YES  |     | NULL    |                |
| account         | varchar(40)  | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)

当前 domains 表中数据

mysql> select * from domains;
+----+---------------------+--------+------------+--------+-----------------+---------+
| id | name                | master | last_check | type   | notified_serial | account |
+----+---------------------+--------+------------+--------+-----------------+---------+
|  1 | vclound.com         | NULL   |       NULL | MASTER |            NULL | NULL    |
|  2 | 3.0.10.in-addr.arpa | NULL   |       NULL | MASTER |            NULL | NULL    |
+----+---------------------+--------+------------+--------+-----------------+---------+
2 rows in set (0.00 sec)

说明:

id - 主键
name - 域名(当前已添加两个), 先关注 vclound.com 
master -  未知
last_check -  未知
type - 是否主域服务器 (通常只有一个 DNS 情况都是 MASTER)
notified_serial - 修改版本信息
account - 未知

添加 163.com 域名 , 调用 sql 例

 insert into pdns.domains (name, type) values ( '163.com', 'MASTER');

更新, 删除, (略)

records 表结构

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| domain_id   | int(11)      | YES  | MUL | NULL    |                |
| name        | varchar(255) | YES  | MUL | NULL    |                |
| type        | varchar(10)  | YES  |     | NULL    |                |
| content     | mediumtext   | YES  |     | NULL    |                |
| ttl         | int(11)      | YES  |     | NULL    |                |
| prio        | int(11)      | YES  |     | NULL    |                |
| change_date | int(11)      | YES  |     | NULL    |                |
| ordername   | varchar(255) | YES  |     | NULL    |                |
| auth        | tinyint(1)   | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)

注: records.domain_id 是 domains 的外键

表说明

id - 主键
domain_id - domains 表(id) 的外键
name - 域名(vclound.com), 正向解析(ddns.vcloudn.com), 反向解析的主机名(105.3.0.10.in-addr.arpa)
type - 定义 name 字段的说明, 如 (SOA [dns 域名) A [正向解析] PTR [反向解析], MX [邮件服务器], CNAME [主机别名] 字段必须大写
content - 定义 name 所对应的 DNS 解析 [对于 type 为 SOA 时, 比较复杂, 不过可参考当前变量值作为固定值]
ttl - 缓存时候, 可作为固定值
prio - 优先级别, 忽略
change_date - 时间戳
ordername - 忽略
auth - 未知道

当前表单中的正向解析数据

mysql> select id, name, type, content, ttl, change_date from records where domain_id=1;
+----+---------------------+------+----------------------------------------------------------------------+-------+-------------+
| id | name                | type | content                                                              | ttl   | change_date |
+----+---------------------+------+----------------------------------------------------------------------+-------+-------------+
|  1 | vclound.com         | SOA  | ddns.vclound.com ddns.vclound.com 2014013003 28800 7200 604800 86400 | 86400 |  1391015078 |
|  4 | pdnsweb.vclound.com | A    | 10.0.3.103                                                           | 86400 |  1391015359 |
|  5 | pdns.vclound.com    | A    | 10.0.3.99                                                            | 86400 |  1391015379 |
|  6 | pdnsdb.vclound.com  | A    | 10.0.3.99                                                            | 86400 |  1391015391 |
+----+---------------------+------+----------------------------------------------------------------------+-------+-------------+


反向解析数据

mysql> select id, name, type, content, ttl, change_date from records where domain_id=2;
+----+-------------------------+------+----------------------------------------------------------------------+-------+-------------+
| id | name                    | type | content                                                              | ttl   | change_date |
+----+-------------------------+------+----------------------------------------------------------------------+-------+-------------+
|  2 | 3.0.10.in-addr.arpa     | SOA  | ddns.vclound.com ddns.vclound.com 2014013002 28800 7200 604800 86400 | 86400 |  1391015099 |
|  3 | 99.3.0.10.in-addr.arpa  | PTR  | pdnsdb.vclound.com                                                   | 86400 |  1391015270 |
|  7 | 103.3.0.10.in-addr.arpa | PTR  | pdnsweb.vcloud.com                                                   | 86400 |  1391018671 |
+----+-------------------------+------+----------------------------------------------------------------------+-------+-------------+
3 rows in set (0.00 sec)

 

模拟添加 163.com 的正向解析方法
这个是域名记录

insert into records (name, type, content, ttl, change_date) values ('163.com, 'SOA', 'dns.163.com dns.163.com 2014013002 28800 7200 604800 86400', '86400');

这个是主机名记录
insert into records (name, type, content, ttl, change_date) values ('dns.163.com, 'A', '192.168.0.1', '86400');
insert into records (name, type, content, ttl, change_date) values ('www.163.com, 'A', '192.168.0.2', '86400');

这样就可以增加两个主机记录了

反向同理, 切记域名为 0.168.192.in-addr.arpa 即可

验证 dns 方法
/etc/resolv.conf
nameserver 10.0.3.99 <-必须指向他

[root@gd02-qa-plxt2-nodomain /]# nslookup vclound.com
Server:         10.0.3.99
Address:        10.0.3.99#53

*** Can't find vclound.com: No answer

[root@gd02-qa-plxt2-nodomain /]# nslookup pdnsweb.vclound.com
Server:         10.0.3.99
Address:        10.0.3.99#53

Name:   pdnsweb.vclound.com
Address: 10.0.3.103

[root@gd02-qa-plxt2-nodomain /]# nslookup pdnsdb.vclound.com
Server:         10.0.3.99
Address:        10.0.3.99#53

Name:   pdnsdb.vclound.com
Address: 10.0.3.99

参考, 上述例子, 注: 不可以直接解析域名

参考反向解析例子

[root@gd02-qa-plxt2-nodomain /]# nslookup 10.0.3.99
Server:         10.0.3.99
Address:        10.0.3.99#53

99.3.0.10.in-addr.arpa  name = pdnsdb.vclound.com.

[root@gd02-qa-plxt2-nodomain /]# nslookup 10.0.3.103
Server:         10.0.3.99
Address:        10.0.3.99#53

103.3.0.10.in-addr.arpa name = pdnsweb.vcloud.com.

<think>好的,用户现在想要了解如何导出PowerDNS的全部记录。之前他已经询问过DNS服务器的基本概念、存储方式以及常见软件,比如PowerDNS。现在他可能在进行实际运维操作,需要备份或迁移数据,或者进行记录审核。 首先,我需要回忆PowerDNS的不同后端存储方式,因为它支持多种后端,比如MySQL、PostgreSQL、SQLite等,甚至还有BIND格式的Zone文件。不同的后端导出方法不同,所以用户的问题需要分情况讨论。 用户可能没有明确说明他们使用的是哪种后端,所以回答需要覆盖常见的几种情况。另外,用户可能需要具体的步骤和命令示例,所以需要给出具体的操作指南,包括如何连接到数据库,如何导出数据,以及如何处理BIND后端的Zone文件。 还要注意权限问题,比如数据库导出可能需要特定的用户权限,或者访问Zone文件需要读取权限。此外,如果使用了API管理的云服务,可能需要不同的方法,比如通过PowerDNS的API来获取记录。 需要确保提供的命令正确无误,并且有解释,让用户明白每个步骤的作用。同时,提醒用户注意数据备份和安全,避免在导出过程中导致数据丢失或泄露。 最后,可能需要给出一些额外建议,比如导出后的数据验证,或者如何导入到其他系统,这样用户能够全面了解整个导出过程的应用场景。</think>以下是PowerDNS导出全部DNS记录的详细操作指南,根据不同的后端存储类型分别说明: --- ### 一、数据库后端导出(MySQL/PostgreSQL/SQLite) **适用场景**:使用关系型数据库作为存储后端(默认安装配置) 1. **连接数据库** ```bash # MySQL示例(需替换实际密码) mysql -u pdns -p pdns ``` 2. **查询所有域列** ```sql SELECT name FROM domains; ``` 3. **导出完整SQL备份(全量)** ```bash mysqldump -u pdns -p --databases pdns > pdns_full_backup.sql ``` 4. **按域导出记录(精确导出)** ```sql SELECT domains.name AS zone, records.name, records.type, records.content, records.ttl, records.prio FROM records LEFT JOIN domains ON records.domain_id=domains.id ORDER BY domains.name, records.name; ``` 5. **生成BIND格式Zone文件** ```sql SELECT CONCAT( records.name, ' ', records.ttl, ' IN ', records.type, ' ', IF(records.type='MX', records.prio || ' ', ''), records.content ) AS record_line FROM records WHERE domains.name='example.com'; ``` --- ### 二、BIND后端导出(Flat File) **适用场景**:使用Zone文件存储配置(需确认pdns.conf配置) ```ini launch=bind bind-config=/etc/powerdns/named.conf ``` 1. **定位Zone文件目录** ```bash grep ^file /etc/powerdns/named.conf | awk '{print $2}' | tr -d \"; ``` 2. **批量导出所有Zone文件** ```bash find /var/lib/powerdns/zones/ -name "*.zone" -exec cp {} /backup/ \; ``` --- ### 三、API导出(适用于RESTful后端) **适用场景**:使用PowerDNS的API管理接口 1. **获取所有域名列** ```bash curl -X GET --header 'X-API-Key: your_api_key' \ 'http://localhost:8081/api/v1/servers/localhost/zones' ``` 2. **导出指定域记录(JSON格式)** ```bash curl -X GET --header 'X-API-Key: your_api_key' \ 'http://localhost:8081/api/v1/servers/localhost/zones/example.com' | jq . ``` --- ### 四、PowerAdmin面板导出(Web GUI) 1. 登录管理界面 2. 进入"Zone templates" → "List zones" 3. 勾选需要导出的域名 4. 点击"Export zones"生成文本文件 --- ### 五、专业工具导出 1. **pdnsutil工具**(官方推荐) ```bash pdnsutil list-all-zones | xargs -I {} pdnsutil export-zone {} >> full_export.zone ``` 2. **DNS控制台重定向**(实时抓取) ```bash dig @pdns-server axfr example.com >> zone_transfer.txt ``` --- ### 注意事项 1. **权限要求**: - 数据库导出需要`SELECT`权限 - Zone文件读取需要pdns用户权限 - AXFR传输需配置`allow-axfr-ips` 2. **数据验证**: ```bash named-checkzone example.com exported.zone ``` 3. **安全建议**: - 敏感数据加密传输(使用`openssl smime`加密) - 避免直接暴露API Key --- ### 典型导出结果示例 ```zone $ORIGIN example.com. @ 3600 IN SOA ns1.example.com. admin.example.com. ( 2023082001 ; serial 7200 ; refresh 3600 ; retry 1209600 ; expire 3600 ; minimum ) @ 3600 IN NS ns1.example.com. @ 3600 IN A 192.0.2.1 www 1800 IN CNAME @ ``` 通过以上方法可以完整导出PowerDNS的DNS记录,建议生产环境采用「数据库导出+API校验」的双重验证机制确保数据一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terry_Tsang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值