MySQL будет ждать определенное время для снятия блокировки, прежде чем он сдастся и выдаст эту ошибку.Если вы можете отследить, когда вы видите эти сообщения об ошибках, в любое согласованное время дня, вам следует посмотреть, что еще сервер делает в это время, например, выполняется ли резервное копирование базы данных.Делая это, вы сможете сузить возможности того, какие процессы могут создавать блокировку, хотя это не всегда так просто сделать - скорее всего, это будет пробой и ошибкой.
Иногда проблемы взаимоблокировки могут бытьвызвано в базе данных. Причина этой проблемы заключается в том, что вы запускаете много пользовательских сценариев и убиваете сценарии до того, как соединение с базой данных получит возможность закрыть.
Если вы можете войти в MySQL из CLI и запуститьСледующая команда
SHOW PROCESSLIST;
, вы получите следующий вывод
+———+—————–+——————-+—————–+———+——+——-+——————+———–+—————+———–+
| Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined | Rows_read |
+———+—————–+——————-+—————–+———+——+——-+——————+———–+—————+———–+
| 6794372 | db_user| 111.11.0.65:21532 | db_name| Sleep | 3800 | | NULL | 0 | 0 | 0 |
| 6794475 | db_user| 111.11.0.65:27488 | db_name| Sleep | 3757 | | NULL | 0 | 0 | 0 |
| 6794550 | db_user| 111.11.0.65:32670 | db_name| Sleep | 3731 | | NULL | 0 | 0 | 0 |
| 6794797 | db_user| 111.11.0.65:47424 | db_name | Sleep | 3639 | | NULL | 0 | 0 | 0 |
| 6794909 | db_user| 111.11.0.65:56029 | db_name| Sleep | 3591 | | NULL | 0 | 0 | 0 |
| 6794981 | db_user| 111.11.0.65:59201 | db_name| Sleep | 3567 | | NULL | 0 | 0 | 0 |
| 6795096 | db_user| 111.11.0.65:2390 | db_name| Sleep | 3529 | | NULL | 0 | 0 | 0 |
| 6795270 | db_user| 111.11.0.65:10125 | db_name | Sleep | 3473 | | NULL | 0 | 0 | 0 |
| 6795402 | db_user| 111.11.0.65:18407 | db_name| Sleep | 3424 | | NULL | 0 | 0 | 0 |
| 6795701 | db_user| 111.11.0.65:35679 | db_name| Sleep | 3330 | | NULL | 0 | 0 | 0 |
| 6800436 | db_user| 111.11.0.65:57815 | db_name| Sleep | 1860 | | NULL | 0 | 0 | 0 |
| 6806227 | db_user| 111.11.0.67:20650 | db_name| Sleep | 188 | | NULL | 1 | 0 | 0 |
| 6806589 | db_user| 111.11.0.65:36618 | db_name| Query | 0 | NULL | SHOW PROCESSLIST | 0 | 0 | 0 |
| 6806742 | db_user| 111.11.0.75:38717 | db_name| Sleep | 0 | | NULL | 0 | 0 | 0 |
| 6806744 | db_user| 111.11.0.75:38819 | db_name| Sleep | 0 | | NULL | 61 | 61 | 61 |
+———+—————–+——————-+—————–+———+——+——-+——————+———–+—————+———–+
15 rows in set (0.00 sec)
В качестве примера 6794372 вы можете увидеть, что команда sleep ивремя 3800. Это предотвращает другие операции.
Эти процессы должны быть убиты 1 на 1 с помощью команды.
KILL 6794372;
Один развы разорвали все спящие соединения, все должно начать работать как обычно