从mysql向终端发送terminal / shell命令并在循环游标时检索应答

时间:2012-01-20 08:18:42

标签: mysql macos terminal command shellexecute

我在macOS上使用php和MySQL。 我想从数据库中选择大量的电子邮件,并使用来自终端/ shell的dig命令对我选择的每封电子邮件执行dns查找,例如:“dig gmail.com”。 当然,我可以通过php循环这个选择,但与在MySQL上循环游标相比,它会非常慢。 如何将终端命令从mysql发送到终端并在macOS上检索答案?

2 个答案:

答案 0 :(得分:0)

你不能在SQL查询中执行shell命令(感谢上帝),否则它将是一个可怕的安全漏洞......你必须从php中执行它。

P.S。但是,可以从MySQL命令行实用程序

执行shell命令
\! ls

...但如果我理解你的问题,它将无助于解决你当前的问题。

答案 1 :(得分:0)

(我假设您在谈论电子邮件地址时确实是指ADDR_SPEC)

  

但与mysql上的循环游标相比,它会非常慢

不,不是真的。唯一的区别是取决于你如何实现这个 PHP方法要求你在开始迭代之前检索整个结果集。然而,将其分解为较小的结果集是微不足道的。

此外,对算法性能的限制是DNS查找的速度 - 而这一切都与延迟有关 - 如果你的目标是让它更快,那么你应该并行运行多个请求。

您应该考虑的下一件事是,您可能为每个MX提供了多个邮箱,例如user1 @ gmail.com,user2 @ gmail.com ....如果你有正确的DNS缓存设置,那么每次进入源时,如果你正在处理一个非常大的数据集或将不止一次这样做,只使用独特的MX主机值更有意义,例如

 SELECT DISTINCT SUBSTR(addr_spec FROM LOCATE('@', addr_spec)) AS mx2chk
 FROM yourtable
 WHERE addr_spec LIKE '%@%'
 AND (email_checked IS NULL
   OR email_checked<NOW() - INTERVAL 300 DAY )
 ;

实际上,如果您标记数据,那么您可以使用自己的数据库来验证MX。

  

使用来自terminal / shell的dig命令

请不要告诉我您正在从PHP控制进程运行shell来进行DNS查找?