You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bind 9.16.33配置MySQL DLZ启动失败,提示Required token $zone$ not found

Bind 9.16.33配置MySQL DLZ启动失败,提示Required token $zone$ not found

看起来你碰到了Bind DLZ配置里的令牌匹配问题,我来帮你定位下原因和解决方案。

首先,先看你日志里的核心错误:

07-Dec-2022 14:54:31.095 Loading 'example_com_dlz' using driver mysql
07-Dec-2022 14:54:31.095 Required token $zone$ not found.
07-Dec-2022 14:54:31.095 Could not build find zone query list

这个错误指向你的DLZ MySQL查询配置有问题——Bind的MySQL DLZ驱动对第一个查询(用于验证zone是否存在的查询)有严格的令牌要求:必须使用$zone$作为域名占位符,而不是你现在用的%zone%。

看你当前的named.conf里的DLZ配置:

dlz "example_com_dlz" {
    database "mysql
    {socket=/run/mysqld/mysqld.sock user=root dbname=zonecc}
    {select id from example_com where zone = '%zone%' }
    {select ttl, record, case when type='TXT' then concat('\"', data, '\"') else data end from example_com where host = '%record%' and zone = '%zone%' }
    ";
};

问题就出在第一个查询的%zone%上,把它改成$zone$即可修复这个错误。修改后的配置如下:

dlz "example_com_dlz" {
    database "mysql
    {socket=/run/mysqld/mysqld.sock user=root dbname=zonecc}
    {select id from example_com where zone = '$zone$' }
    {select ttl, record, case when type='TXT' then concat('\"', data, '\"') else data end from example_com where host = '%record%' and zone = '%zone%' }
    ";
};

另外给你几个额外的检查点:

  • 确认MySQL的root用户(你配置里用的这个账号)有访问zonecc数据库和example_com表的权限,避免后续出现权限错误
  • 验证socket路径/run/mysqld/mysqld.sock是否正确,可以用命令mysql -u root -S /run/mysqld/mysqld.sock测试连接是否正常
  • 第一个查询只需要返回非空结果即可(用来确认zone存在),你的select id写法是没问题的

修改完配置后,先执行sudo named-checkconf检查配置语法是否正确,没问题的话再重新启动named服务应该就能正常运行了。

备注:内容来源于stack exchange,提问作者Andy Lam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:58:02