0

私は UNIX サーバー上で多数のデータベースを管理しており、.NET を使用してこれらのデータベースのバックアップを毎日行っていますmysqldump。これらのデータベース (の一部) は非常に大きい (20+Gb) ため、通常は を使用してバックアップ .sql ファイルをbzip2圧縮し、圧縮された bz2 ファイルを取得します。

バックアップ プロセスの一環として、新しいバックアップ ファイルのサイズが以前のバックアップ ファイルのサイズ以上であることを確認します。これらのデータベースには毎日データを追加していますが、これらのデータベースからデータを削除することはほとんどありません。データベース。

バックアップ ファイルのサイズのチェックは、バックアップの品質のチェックです。データベースは主にサイズが大きくなるだけなので、新しいバックアップが古いバックアップよりも小さい場合は、次のいずれかを意味します。a) データベースから何かが削除された(その場合、何を確認する必要があります...) または b) バックアップで問題が発生しました (この場合、理由を確認する必要があります...)。

ただし、bz2 ファイルのサイズを比較すると、たとえば の比較 (を使用test) を使用するとstat %s、データベースのサイズが大きくなったにもかかわらず、bz2 ファイルが縮小している可能性があります。おそらく、より効率的な圧縮が原因です。

では、バックアップ ファイルのサイズを比較するにはどうすればよいでしょうか。

  • 1 つのオプションは、以前のバックアップ ファイルを .bz2 から .sql に解凍し、これらの .sql ファイルのサイズを比較することです。ただし、これらは非常に大きなファイル (20+Gb) であるため、圧縮/解凍には時間がかかる場合があります...
  • もう 1 つのオプションは、以前のバックアップ ファイルを .sql として保持し、再度 .sql ファイルの比較を行うことです。これは私の好みのオプションですが、大量の .sql ファイルが横たわって終わらないように注意する必要があります。

または、SO コミュニティの誰かが、より優れた、またはより優れたアイデアを持っている可能性があります...?

4

1 に答える 1

0

入力ファイルを部分 (たとえば 100MB のチャンク) に分割し、それらを別々に比較することができます。入力が異なっていてもサイズは実際には同じままである可​​能性があるため、通常は違いを探すために使用しないでください。代わりに、cmp などを使用してファイルが異なるかどうかを確認してください。

個々の部分の bz2 ファイルを一緒に cat して、完全に有効なマルチストリーム bz2 ファイルを取得することもできます。このファイルは、問題なく全体を再度圧縮解除できます。bzip の並列実装である pbzip を調べて、smp/マルチコア システムでのプロセスを高速化するために、並列 bzip をマルチストリーム bz2 ファイルに正確に使用するメカニズムを使用することをお勧めします。

ファイルを部分に分割することをお勧めする理由について: mysql の設定によっては、一部の部分が変更されない可能性があり、実際にはほとんどのデータが最後に追加される可能性があります。これを確認できる場合は、ダンプ全体の小さな部分を比較するだけで済み、プロセスが高速化されます。

それでも、mysql がメモリ内のデータを再ソートする可能性があるため、何も追加または削除しなくてもデータ全体が変更される可能性があることに注意してください (たとえば、OPTIMIZE コマンドでこれが発生する可能性があります)。

InnoDB を使用する場合、データを分割する別の方法が可能です。その場合、テーブルごとに 1 つのファイルを使用するように (my.cnf を使用して) mysql に指示できます。実際に変更した場合 (いくつかのテーブルに静的データがある場合) および/または b) テーブル ファイルの最終変更日を保存し、それを事前に比較する (繰り返しますが、これは、テーブルが静的データ)

于 2013-09-11T19:34:33.197 に答える