非常に似たファイルを保存するためのローリングの違いはありますか?

非常に似たファイルを保存するためのローリングの違いはありますか?

職場では、毎晩 mysql データベースをダンプします。毎日、データのほぼ90〜95%が重複し、時間の経過とともに増加すると推定されます。 (たわごと、一部は現在の時点でおそらく99%になるでしょう)

これらのダンプの行は単一のmysql INSERT文であるため、唯一の違いは行全体とファイルの順序です。ソートすると、ファイル間の実際の違いは非常に小さいです。

私は探していましたが、ダンプの出力をソートする方法が見つかりませんでした。ただし、コマンドを介してパイプできますsort。それから、同じ行の長くて長いブロックがあるでしょう。

だから、違いを保存する方法を見つけようとしています。マスターダンプから始めて、毎晩比較できます。しかし、その違いは毎晩より大きくなるでしょう。あるいは、個々には非常に小さなローリング差を作成することができますが、毎晩一連のマスター差をすべて集める必要がある場合は、計算に時間がかかります。

これは可能ですか?どのツールを使用する必要がありますか?


編集するmysqlバックアップを実行する方法を尋ねるものではありません。今はmysqlを忘れてください。これは赤ニシンです。私が知りたいのは、一連のファイルから一連のローリングdiffを作成する方法です。毎晩私たちはファイルを受け取ります(mysqldumpファイルですね)は以前と99%似ています。はい、すべて圧縮します。しかし、当初はあまりにも多くの冗長性を持つことは冗長です。私にとって本当に必要なのは前日の夜との違い…前日の夜との1%の違い…など。だから私が追求するのは、毎晩データの1%しか保存できないように一連の違いを実行する方法です。

答え1

バイナリの違いを保存できる2つのバックアップツールは次のとおりです。rdiff バックアップそして二重性。両方に基づいていますlibrsyncが、その基盤では非常に異なる動作をします。 Rdiff-backup は最新のコピーと逆の違いを保存しますが、duplicity は既存の増分差を保存します。両方のツールは異なる周辺機能セットも提供します。

答え2

最近、私はデータベースダンプをgitに保存しようとしました。データベースダンプが非常に大きい場合、これは実用的ではないかもしれませんが、小規模データベース(Wordpressサイトなど)では機能します。

私のバックアップスクリプトはおおよそ次のようになります。

cd /where/I/keep/backups && \
mysqldump > backup.sql && \
git commit -q -m "db dump `date '+%F-%T'`" backup.sql

答え3

a.sql毎週のバックアップでこのようなことができます。

mysqldump > b.sql
diff a.sql b.sql > a1.diff
scp a1.diff backupserver:~/backup/

今週の終わりには、diffファイルが大きくなります。

gzip -9私の提案は(最大圧縮のために)gzipすることです。現在、59 MB gzファイルを使用してこれを実行していますが、元のファイルは639 MBです。

答え4

(まだ本番ではこれを実行していません。)

毎日または毎週フルバックアップを実行します。毎時間または毎日のリレーログをバックアップします。

関連情報