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
相关产品推荐
相关产品推荐

