Нечасто, но бывает, что сталкиваешься с зависшей транзакцией, когда операция на изменение какой-либо записи тормозит доступ к сайту.
Гугление по вопросу и последующее практическое применение привели меня к следующему алгоритму решения проблемы
(поначалу желательно выполнять в ручном режиме):
Описание задачи
Получение списка активных транзакций и удаление тех, время выполнения которых, по мнению администратора, затянулось.
Алгоритм действий
1. Выполнить команду:
где <password> следует заменить на пароль
2. Посмотреть в результате, сколько транзакция активна — "ACTIVE (<time> sec)",
где <time> — время в секундах.
3. Найти "MySQL thread id <thread_id>",
где <thread_id> — id транзакции.
4. Выполнить команду (запуск mysql-console):
где <password> следует заменить на пароль
5. Запустить в mysql-console команду:
где <thread_id> следует заменить на id транзакции.
Активная транзакция будет удалена, и проблем с доступом к сайту не возникнет.
Гугление по вопросу и последующее практическое применение привели меня к следующему алгоритму решения проблемы
(поначалу желательно выполнять в ручном режиме):
Описание задачи
Получение списка активных транзакций и удаление тех, время выполнения которых, по мнению администратора, затянулось.
Алгоритм действий
1. Выполнить команду:
mysql -uroot -p<password> -e "SHOW ENGINE INNODB STATUS\G" | grep -n2 "ACTIVE" |
где <password> следует заменить на пароль
2. Посмотреть в результате, сколько транзакция активна — "ACTIVE (<time> sec)",
где <time> — время в секундах.
3. Найти "MySQL thread id <thread_id>",
где <thread_id> — id транзакции.
4. Выполнить команду (запуск mysql-console):
mysql -uroot -p<password> |
где <password> следует заменить на пароль
5. Запустить в mysql-console команду:
kill <thread_id>; |
где <thread_id> следует заменить на id транзакции.
Активная транзакция будет удалена, и проблем с доступом к сайту не возникнет.