2008-09-15 5 views
24

我々は99%INSERT、約100秒間のライブMySQLデータベースを持っています。毎日データをアーカイブして、メインのライブデータベースに影響を与えずにクエリーを実行できるようにしたいと考えています。さらに、アーカイブが完了したら、ライブデータベースをクリアする必要があります。ライブMySQLデータベースをアーカイブする最良の方法

挿入をロックせずにこれを行うための最善の方法は、(可能であれば)とは何ですか? INSERT DELAYEDをクエリに使用します。

答えて

13

http://www.maatkit.org/はMK-アーカイバに

アーカイブを持っているか、別のテーブルおよび/またはファイルにテーブルから行をパージします。これは、重要なオンライントランザクション処理(OLTP)クエリに干渉することなく、非常に小さなチャンク内のデータを効率的に「ニブル」するように設計されています。これは、バック・トラッキングのない問合せ計画でこれを達成します。このプランは、表から問合せまでの場所を保持します。後続の問合せは、アーカイブ可能な行を見つけるためにほとんど機能しません。

別の方法としては、単純に毎日新しいデータベーステーブルを作成することです。 MyIsamにはいくつかの利点があります。なぜなら、テーブルの末尾にあるINSERTは一般的にはブロックされないからです。そのようなテーブルにhttpdトラフィックを記録するWebサイトが数多くあります。 MySQLの5.1

、ずっと同じことを行うことができますパーティションテーブルもあります。

+0

mk-archiverは私が欲しいものを正確に行います! – DavidM

+2

MaatkitはPercona Toolkitの一部となっています - http://www.percona.com/doc/percona-toolkit/2.1/pt-archiver.html –

0

2つのミラー化されたデータベースを保存できますか? 1つに書き出し、2番目をアーカイブとして保存します。 24時間ごとにスイッチを入れます(または、間違いなく長いと思われます)。アーカイブであったデータベースに、すべての今日のアクティビティを挿入します。次に、2つのデータベースが一致する必要があります。これを新しいライブDBとして使用します。アーカイブされたデータベースを取り出し、必要な操作を行います。積極的に書き込まれていないことを今すぐバックアップ/抽出/読み込みできます。

その種類のあなたは、バックアップ用のドライブをオフラインにし、それを再同期することができますミラーRAIDを持っているような、バックアップのために他のドライブを取ります。

1

これに対して、MySQLレプリケーションは完全に機能します。
マスター - >ライブサーバー。
スレーブ - >同じネットワーク上の別のサーバー。

2

これはレプリケーションのようなサウンドが最適です。最初の同期後、スレーブはBinary Logを介して更新を取得します。したがって、マスターDBにはまったく影響しません。私はmysqlのパーティションテーブルを使用して、私はすべての面で素晴らしい結果を達成しました

More on replication.

2

関連する問題