MySQLの関数の呼び出しが失敗した(つまり0が返された)理由を特定する方法はありGET_LOCK
ますか、または以下の問題についての私の素朴な理解が正しくない理由を教えてください。
マニュアルによる
タイムアウト秒のタイムアウトを使用して、文字列strで指定された名前のロックを取得しようとします。ロックが正常に取得された場合は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
か?そうでない場合、この問題をさらにデバッグするためのアイデアはありますか?