Ошибка 1205: таблица все еще заблокирована через много времени

У меня был запрос, который я выполнял в Mysql Workbench на своем компьютере, база данных находится на удаленном компьютере.

Через некоторое время я получил ошибку 2013 года (Потерянное соединение с сервером MySQL во время запроса), не было никакого эффекта запроса. Позже я попробовал несколько разных запросов и всегда получал:

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

Означает ли это, что в запросе, который я выполнил (во время которого было потеряно соединение), таблица по-прежнему заблокирована, если да, то как я могу ее освободить Прошло три часа с момента первого запроса.

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 года, - это запрос с идентификатором 1205.

1 ответ

Решение

Хорошо, используя вывод из show processlist, вы можете увидеть, что PID 1208 заблокировал вашу таблицу. В песочнице вы можете просто все убить и вернуться к работе. Но в реальной жизни вы хотели бы убить PID, который имеет блокировку, и затем выполнить оставшиеся запросы. Используя приведенный выше вывод, вы должны выполнить следующую инструкцию как root в MySQL

mysql> kill 1208;

Запустите это и посмотрите, завершены ли другие ваши запросы. Если они не и заблокировать еще раз. Повторите описанную выше процедуру, а затем снова посетите ваш SQL.

Другие вопросы по тегам