有没有办法确定为什么调用 MySQL 的GET_LOCK
函数失败(即返回 0?),或者告诉我为什么我对下面问题的天真理解是不正确的?
根据手册
尝试使用由字符串 str 给出的名称获取锁,使用 timeout 秒的超时。如果锁定成功返回 1,如果尝试超时返回 0(例如,因为另一个客户端之前锁定了该名称)
我正在调试一个尝试使用以下 SQL 获取锁的应用程序
SELECT GET_LOCK('thinkup_2_b2_dev.crawler', 1) AS result
每当此代码从 PHP 上下文运行时,result
始终为零。这发生在我的本地开发机器上,并且发生在我第一次运行应用程序时。在其他世界中,我相对确定没有以前的锁。
这是因为,当我使用第三方工具(特别是 SequelPro)连接到数据库并运行以下命令时
;SHOW FULL PROCESSLIST
我没有看到任何关于锁的提及(据我了解,这些锁会在我运行时出现SHOW FULL PROCESSLIST
)。我所看到的只是单行(我相信这与我当前使用的连接相对应。)
9617 root localhost thinkup_2_b2_dev Query 0 NULL SHOW FULL PROCESSLIST
(根据一些独立测试,似乎SHOW FULL PROCESSLIST
没有显示这些锁)
有没有办法让 MySQL 告诉我为什么它从调用返回零get_lock
?如果没有,是否有人对进一步调试此问题有任何想法?