よく似たファイルを保存するためのローリングdiff?


15

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

これらのダンプでは、1行が1つのmysql INSERTステートメントであるため、唯一の違いは行全体と、ファイル内での順序です。それらをソートした場合、ファイルごとの実際の違いは非常に小さいでしょう。

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

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

これは可能ですか?どのツールで?


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

回答:


12

バイナリ差分を保存できる2つのバックアップツールがあるのrdiff-バックアップ二枚舌。どちらもに基づいていますがlibrsync、それより上ではまったく異なる動作をします。Rdiff-backupは最新のコピーとリバースdiffを保存しますが、重複性は従来の増分diffを保存します。この2つのツールは、さまざまな周辺機能も提供します。


1
IIUC、rdiff-backupはより魅力的です。これは、通常の方法でバックアップを参照できるのに対し、複製には古いコピーしかありません。
シェパン

質問と質問はかなり古いものですが、使用方法を示すコマンドの例を追加できますか?たとえば、backup201901.tar.gz、backup201902.tar.gz、...、backup201912.tar.gz、backup202001.tar.gzなどです。これは将来の参照に役立ちます。
バスジ

11

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

私のバックアップスクリプトは大体次のとおりです。

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

これは差分のみを保存しますか?
ユーザー394

2
はい。とても便利です!任意の時点からファイルを「チェックアウト」できます。gitは自動的に差分を結合して、その時点で存在していたファイル全体を提供します。
9

1
このブログの記事(ない鉱山)は、より詳細に入る:viget.com/extend/backup-your-database-in-git コメントは長所と短所と注意事項により取得します。また、gitを使用すると、バージョンをロールバックできる以上のことが得られることも付け加えます。ダンプにタグを付けることも、別のブランチ(dev / prod)を持つこともできます。私がそれを見る方法はgit(またはお気に入りの最新バージョン管理システムを挿入)が、私自身のdiff / gzip 'ソリューション'を展開するよりも良い仕事をします。この記事に関する警告:ダンプを公開したい(またはプライベートリポジトリの料金を支払っている)場合を除き、ダンプをgithubにプッシュしないでください。
びしょぬれ

1
Gitは差分を保存するだけではありませ。実際、主に各リビジョンの完全なスナップショットを保存しますが、さまざまな最適化が行われます。参照してください。この優れた解答とその質問
tremby

1

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

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

差分ファイルは、週の終わりまでに大きくなります。

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


私たちは既にそれらをgzip圧縮しています:)
user394

-3

(本番環境ではこれを行っていません。)

1日または1週間に1回完全バックアップを実行します。バックアップリレーログは1時間または1日に1回です。


リレーログとは何ですか?
ユーザー394
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.