MySQL デッドロック - 列の追加

MySQL デッドロック - 列の追加

先日、厄介な MySQL 問題が発生しました。PHPMyAdmin インターフェイスを使用して、テーブル「Promotions」に 2 つの新しい列を追加しました (既存の列は 13 個、レコード数は約 750 個)。このクエリ (「ALTER TABLE.....」) は完全に実行されず、テーブルがロックされたため、「Promotions」への後続のクエリはハングしてキューに入れられました。この問題が起こっていることに気付くまでに約 1 時間かかりましたが、データベースを再起動することで問題は解決しました。

取るべき標準的な予防措置や、データベース スキーマの変更によって発生する既知の問題はありますか? このようなロックが発生するのはこれまで見たことがありません。

答え1

特に実稼働環境で、mysql テーブルをよりスムーズに変更するには、次のシナリオを検討してください。

1. CREATE tmp_table LIKE original_table
2. ALTER tmp_table..
3. INSERT INTO tmp_table SELECT * FROM original_table
4. RENAME original_table to orginal_table_old
5. RENAME tmp_table to original_table
6. DROP original_table_old

また、興味があるかもしれませんフラッシュテーブルそしてテーブルのロックを解除ドキュメントについて。

編集: この問題を解決する代替解決策は、pt-オンライン スキーマ変更Percona によるツール。

関連情報