В этой статье приведу короткий и самый быстрый вариант решения ошибки «Lock wait timeout exceeded; try restarting transaction».
Конечно, если ошибка у Вас в системе — нужно искать и решать корень проблемы — например, незакрытые транзакции. Я же приведу алгоритм быстро, в моменте, решения.
Итак, если Вы выполняете запросы, не заходя на сервер MySql — пропустите первый шаг:
1) Заходим в MySQL с консоли:
mysql -u %YOUR_LOGIN% -p
Замените %YOUR_LOGIN% на свой логин, после чего введите свой Пароль.
2) Выполните:
SHOW PROCESSLIST;
Этот запрос покажет Вам список запущенных процессов — один из которых, вероятно, блокирует Вашу таблицу. Обратите внимание на колонку Time — процесс, который завис с большой вероятностью — тот, который Вам нужен.
3) Выполните команду ниже с ID процесса, который может блокировать Вашу БД:
KILL %PROCESS_ID%;
4) Повторно выполните свой первый запрос, после которого Вы получали ошибку. Если она исчезнет — значит Вы правильно определили потенциально нежелательный процесс.
Надеюсь статья была полезной. Удачи!