回答:
innodb_lock_wait_timeoutを設定してInnoDBのロック待機タイムアウト値を増やすことを検討する必要があります。デフォルトは50秒です
mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50 |
+--------------------------+-------+
1 row in set (0.01 sec)
/etc/my.cnfこの行で永続的に高い値に設定できます
[mysqld]
innodb_lock_wait_timeout=120
mysqlを再起動します。この時点でmysqlを再起動できない場合は、次を実行します。
SET GLOBAL innodb_lock_wait_timeout = 120;
セッションの期間に設定することもできます
SET innodb_lock_wait_timeout = 120;
続いてクエリ
このメッセージは、アクセスしようとしているデータベースの内容が(通常は長時間実行されている)前のプロセスによってロックされている場合に表示されます。MySQLは、ロックが解除されるまで一定の時間待機してから、ロックを放棄してエラーをスローします。これらのエラーメッセージが表示されている時刻を一貫した時刻まで追跡できる場合は、サーバーがその時点で他に実行していることを確認する必要があります。たとえば、データベースバックアップが実行されています。これを行うことにより、ロックを作成するプロセスの可能性を絞り込むことができるはずですが、必ずしもそうするのは簡単ではありません-試行錯誤の可能性があります。
この問題の背後にある理由は、多くのカスタムスクリプトを実行していて、データベース接続が閉じる機会を得る前にスクリプトを強制終了している場合です。
何かがクエリの実行をブロックしています。おそらく、クエリ内のテーブルの1つから更新、挿入、または削除している別のクエリです。あなたはそれが何であるかを知る必要があります:
CLIからMySQLにログインして次のコマンドを実行できる場合
SHOW PROCESSLIST;
ブロッキング/スリーププロセスを見つけたら、それを見つけてid実行します。
KILL {id};
最初のクエリを再実行します。
このリンクが役立つかもしれません: SQLSTATE [HY000]:一般的なエラー:1205ロック待機タイムアウトを超えました。トランザクションMagentoを再起動してみてください。
サーバーのphp.iniで実行時間を増やすか、ホスティングプロバイダーに依頼してください。