「スタックした」MySQL テーブルのロック解除:「ロック待機タイムアウトを超過しました」のトラブルシューティング
「ロック待機タイムアウトを超過しました。再起動してみてください」というメッセージが発生した場合MySQL で InnoDB テーブルを操作中に「トランザクション」エラーが発生した場合は、トランザクションが次のようになった可能性があります。 立ち往生。テーブルを修正し、スタックしたトランザクションを解決する方法は次のとおりです。
1.スタックしたトランザクションを特定します:
MySQL コマンドライン インターフェイスまたは phpMyAdmin を通じて次のコマンドを実行します:
SHOW PROCESSLIST;
これにより、実行中のスレッドのリストが表示されます。実行時間が長いスレッド、または「スリープ」状態にあるスレッドを探します。 「Id」欄に、対応するスレッドIDが表示されます。
2.スタックしたスレッドを終了します:
スタックしたスレッドが特定されたら、コマンド ライン インターフェイスで次のコマンドを使用してスレッドを終了します。
KILL <thread_id>;
3.トランザクションを再起動します (オプション):
トランザクションがまだアクティブな場合は、トランザクションを再起動して、保持されているロックを解放します。これを行うには、次のコマンドを実行します。
START TRANSACTION; COMMIT;
4.インデックスを削除します (該当する場合):
以前に影響を受けるテーブルのインデックスを削除しようとして、ロックが原因で失敗した場合は、スタックしたスレッドを終了してトランザクションを再開した後、インデックスを再度削除してみてください。 .
ALTER TABLE <table_name> DROP INDEX <index_name>;
次の手順に従うことで、スタックしたテーブルのロックを解除し、「ロック待機タイムアウトを超えました」エラーを解決できます。今後同様の問題が発生するのを防ぐために、実行中のスレッドを定期的にチェックして、スタックしている可能性のあるトランザクションを特定して終了するようにしてください。
以上がMySQL の「ロック待機タイムアウトを超過しました」エラーを修正する方法: スタックしたテーブルのロックを解除するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。