2016-07-27 11 views
0

テーブルの名前を変更しようとしていますが、常にWaiting for table metadata lockでハングアップします。ここで私はそれをやろうとしています:メタデータロックのためにテーブルの名前を変更できません

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

しかし、最初の名前変更ステートメントは無期限にハングします。どのようにして2つのテーブルの名前を変更できますか?

+0

'show processlist'には表示されず、スレッドを強制終了することで殺すことができないコミットされていないトランザクションがあったようです。テーブルを解放するために必要なのは、データベースを再起動することでした。 – David542

答えて

1

私はかなりRENAME TABLEがトランザクションを終了すると確信しています。

あなたは両方を行うことができますが、単一の、アトミック、声明の中で名前を変更(なしトランザクションなし):

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

それはテーブルのいずれかで忙しくしている他の接続のために待機する必要があります。いくつかの接続を持たないことを確認してください。

関連する問題