2016-09-14 11 views
0

私は場合について新しい意見が必要です。どのような考えが評価されます。大きなpercona mysql dbから多くの行を削除

入力:巨大なpercona mysql(5.5)データベースがあり、これにはTb(テラバイト)がかかります。 innodbエンジンのテーブル。 そのサイズの半分(2/3)をできるだけ早く削除する必要があります。 また、マスタースレーブ構成もあります。 は(生産のダウンタイムを回避するために)スレーブサーバ上の各テーブルに対して実行します:私は、次の解決策を検討していますことを達成するための最も簡単な方法として

  1. 停止複製
  2. ないように行を選択します元のテーブル「table_oldは」
  3. 0123名を修正する
  4. ドロップ - 「table_old」、新しいテーブルに元のテーブルの名前を変更し
  5. 元のテーブルと同じ構造を持つ、空の新しいテーブルに削除されます
  6. 複製を開始する

問題は、私たちには多くのFK制約があることです。また、私はこのプロセス中に複製を中断することを恐れています。

質問: 質問:このソリューションのFK制約では、どのような潜在的な問題がありますか? 2)複製を中断しないでください。 3)意見ですか?代替ソリューション?

ありがとうございます。

答えて

0

DBをオフラインにすることができれば(あなた以外の誰もDBにアクセスしていない人)は、あなたのソリューションに行くことができますが、前に関与したFKを削除して後で再作成する必要があります。コピー操作で番号が変更されるAUTO_INCREMENT列もチェックする必要があります。

データベースをオンラインにしたい場合はFKが必要ですが、巨大なログテーブルで同様の問題が発生しました。すべてのレコードを一度に削除しようとすると、データベースがロックされたり、テーブルが破損したりします。

私はゆっくりとアプローチしました。クラスター化された主キーを使用してテーブルから行のバッチを削除するプロシージャを作成し、それをn秒ごとに実行するようにスケジュールしました。

関連する問題