web-dev-qa-db-ja.com

非常に類似したファイルを保存するためのローリング差分?

職場では、mysqlデータベースの夜間ダンプを実行します。日々、データの90〜95%近くが重複しており、時間の経過とともに増加していると推測します。 (この時点で、おそらく99%の人もいます)

これらのダンプは、1行が単一のmysql INSERTステートメントであるため、唯一の違いは行全体と、ファイル内の行の順序です。それらを並べ替えると、ファイルごとの実際の違いは非常に小さくなります。

私は探していましたが、ダンプで出力を並べ替える方法が見つかりませんでした。ただし、sortコマンドを使用してパイプすることはできます。次に、同じ行の長くて長いブロックがあります。

だから私はdiffだけを保存する方法を考えようとしています。私はマスターダンプから始めて、毎晩それと比較することができました。しかし、差は毎晩大きくなります。または、個別に非常に小さいローリング差分を作成することもできますが、シリーズ全体のマスター差分を毎晩まとめる必要がある場合は、計算に時間がかかるようです。

これは実行可能ですか?どのようなツールで?


編集 mysqlバックアップの実行方法を尋ねていません。今のところmysqlを忘れてください。赤いニシンです。私が知りたいのは、一連のファイルから一連のローリング差分を作成する方法です。毎晩、前のファイルと99%類似したファイル(がmysqldumpファイルになる可能性があります)を取得します。はい、すべてgzipで圧縮します。しかし、そもそもそのすべての冗長性を持つことは冗長です。私が本当に必要としているのは、前夜との違いだけです...前夜との違いはわずか1%です...など。だから私が求めているのは、一連の差分を作成する方法です。そのため、毎晩その1%を保存するだけで済みます。

18
user394

このようなことを行うことができます(毎週のバックアップとしてa.sqlを使用)。

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

差分ファイルは週末までに大きくなります。

私の提案はそれをgzipで圧縮することです(最大の圧縮にはgzip -9を使用してください)。現時点ではこれを行っており、元のファイルが639MBであるのに対し、59MBのgzファイルを使用できます。

3
Gert