2009-07-31 16 views
0

私は、バックアップMySQLデータへのrsyncを使用しようとしています。テーブルはMyISAMストレージエンジンを使用します。のrsyncとのMyISAMテーブル

私の期待は最初のrsyncの後、その後のrsyncsは非常に高速であるというものでした。表のデータがまったく変更された場合、操作は遅くなります。

Iは、実際のデータを含む989メガバイトのMYDファイルで実験を行った:

試験1から 予想されるように修飾されていないデータを

  • rsync -a orig.MYD copy.MYD
    • を再コピーは時間がかかります
    • rsync -a orig.MYD copy.MYD
      • 瞬間 - 高速化が数百万にある

    テスト2 - 再コピーわずかに変更されたデータ

    • rsync -a orig.MYD copy.MYD
      • が期待どおりに時間がかかる
    • UPDATE table SET counter = counter + 1 WHERE id = 12345
    • rsync -a orig.MYD copy.MYD
      • 元のコピーのように長い時間がかかります!

    何が得られますか? rsyncは小さな変更をコピーするだけの理由は何ですか?

    編集:実際には、試験2における第二のrsyncは、最初と同じ時間がかかり。 rsyncは明らかにファイル全体を再度コピーしています。

    編集:ローカルからローカルへコピーするときに、--whole-fileが暗黙指定されています。 --no-whole-fileを指定しても、パフォーマンスはひどいものです。

+0

あなたはデータベース複製を調べましたか?私はそれに精通していないが、この場合に行うべき正しいことのように聞こえる。 –

答えて

1

rsyncは、何が変更されたかを判断するためにブロックハッシュを計算する必要があります。変更なしの場合は、ファイルのMOD時間/サイズを調べるためのショートカットです。

0

のrsyncは、ファイルが変更された場合、それは見的アルゴリズムを使用して、それの一部が変更され何見ています。大きなデータベースでは、変更がファイルの大きな部分に広がっていることが一般的です。これはrsyncの最悪のシナリオです。

0

rsyncはファイルベースです。あなたがブロックベースのシステムでそれをやる方法を見つけたら、変更されたブロック/バイトをバックアップするだけです。

LVMのスナップショットは、これを行う一つの方法かもしれません。

0

ローカルコピーを実行する場合、rsyncはデフォルトで--whole-fileにデフォルト設定されています。チェックを行うよりも高速です。

  • あなたが最速ローカルコピーをしたい場合、あなたはすでにそれを得ました。
  • rsyncのスピードアップを確認するには、ネットワーク経由でコピーします。印象的ですが、地元のフルコピーよりも速くはありません。

rsyncローカルコピーはcpの代わりに、いくつかのファイルだけが変更される大きなディレクトリがある場合に便利です。これらのファイル全体をコピーします。変更されていないものはすばやくスキップします(タイムスタンプとファイルサイズをチェックするだけです)。 1つの大きなファイルの場合は、cpよりも優れていません。

関連する問題