0

自分のコンピューターのMysqlワークベンチで実行したクエリがあり、データベースはリモートコンピューターにあります。

しばらくすると、2013 エラー (クエリ中に MySQL サーバーへの接続が失われました) が発生しましたが、クエリの影響はありませんでした。後でいくつかの異なるクエリを試しましたが、常に次の結果が得られました。

Error Code: 1205. Lock wait timeout exceeded; try restarting transaction

これは、(接続が失われたときに) 実行したクエリがまだテーブルをロックしていることを意味しますか? もしそうなら、どうすればテーブルを解放できますか? 最初のクエリから 3 時間が経過しました。

1205    admin_pw    BSN-176-177-215.dial-up.dsl.siol.net:9054   admin_pw    Query   11217   Sending data    DELETE n1 FROM mm_ads_fields_values n1, mm_ads_fields_values n2
WHERE n1.id < n2.id 
AND n1.aid = n2
1206    admin_pw    BSN-176-177-215.dial-up.dsl.siol.net:9100   admin_pw    Sleep   415     
1208    admin_pw    BSN-176-177-215.dial-up.dsl.siol.net:9281   admin_pw    Query   622 Locked  ALTER IGNORE TABLE mm_ads_fields_values ADD UNIQUE KEY idx1(aid,value)
1308    admin_pw    localhost       Sleep   30      
1309    admin_pw    BSN-176-177-215.dial-up.dsl.siol.net:16938  admin_pw    Query   0       show processlist

show show processlist の出力で、2013 エラーが発生した最初のクエリは ID 1205 のものです。

4

1 に答える 1

1

OK、show processlist の出力を使用すると、PID 1208 でテーブルがロックされていることがわかります。サンドボックスでは、すべてを殺して仕事に戻ることができます。しかし実際には、ロックされている PID を強制終了し、残りのクエリを実行できるようにする必要があります。上記の出力を使用して、MySQL で root として次のステートメントを実行します。

mysql> kill 1208;

これを実行して、他のクエリが完了するかどうかを確認します。そうでない場合は、もう一度ロックします。上記の手順を繰り返してから、SQL を再検討してください。

于 2013-06-19T20:22:18.577 に答える