2016-07-27 3 views
0

Я пытаюсь переименовать таблицу, но она всегда просто зависает с Waiting for table metadata lock. Вот как я пытаюсь это сделать:Невозможно переименовать таблицу из-за блокировки метаданных

start transaction; 
RENAME TABLE `main_territorypricing` TO `main_territorypricing2`; 
RENAME TABLE `main_territorypricing1` TO `main_territorypricing`; 
COMMIT; 

Но первый оператор переименования висит бесконечно. Как бы переименовать две таблицы?

+0

Кажется, что были незафиксированные транзакции, которые не отображались в 'show processlist' и не могли быть убиты, убив их поток. То, что требовалось для «освобождения» таблицы, было перезапуском базы данных. – David542

ответ

1

Я уверен, что RENAME TABLE прекратит транзакцию. не

Вы можете сделать оба переименовывает в одном, атомном, заявление (без операции):

RENAME TABLE `main_territorypricing` TO `main_territorypricing2`, 
      `main_territorypricing1` TO `main_territorypricing`; 

Он должен будет ждать каких-либо других соединений, которые заняты какой-либо из таблиц; убедитесь, что у вас нет какого-либо соединения, которое не отпускает.