職場では、毎晩 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
(まだ本番ではこれを実行していません。)
毎日または毎週フルバックアップを実行します。毎時間または毎日のリレーログをバックアップします。