職場では、mysqlデータベースの夜間ダンプを実行します。日々、データの90〜95%近くが重複しており、時間の経過とともに増加していると推測します。 (この時点で、おそらく99%の人もいます)
これらのダンプは、1行が単一のmysql INSERTステートメントであるため、唯一の違いは行全体と、ファイル内の行の順序です。それらを並べ替えると、ファイルごとの実際の違いは非常に小さくなります。
私は探していましたが、ダンプで出力を並べ替える方法が見つかりませんでした。ただし、sort
コマンドを使用してパイプすることはできます。次に、同じ行の長くて長いブロックがあります。
だから私はdiffだけを保存する方法を考えようとしています。私はマスターダンプから始めて、毎晩それと比較することができました。しかし、差は毎晩大きくなります。または、個別に非常に小さいローリング差分を作成することもできますが、シリーズ全体のマスター差分を毎晩まとめる必要がある場合は、計算に時間がかかるようです。
これは実行可能ですか?どのようなツールで?
編集 mysqlバックアップの実行方法を尋ねていません。今のところmysqlを忘れてください。赤いニシンです。私が知りたいのは、一連のファイルから一連のローリング差分を作成する方法です。毎晩、前のファイルと99%類似したファイル(がmysqldumpファイルになる可能性があります)を取得します。はい、すべてgzipで圧縮します。しかし、そもそもそのすべての冗長性を持つことは冗長です。私が本当に必要としているのは、前夜との違いだけです...前夜との違いはわずか1%です...など。だから私が求めているのは、一連の差分を作成する方法です。そのため、毎晩その1%を保存するだけで済みます。
このようなことを行うことができます(毎週のバックアップとしてa.sql
を使用)。
mysqldump > b.sql
diff a.sql b.sql > a1.diff
scp a1.diff backupserver:~/backup/
差分ファイルは週末までに大きくなります。
私の提案はそれをgzipで圧縮することです(最大の圧縮にはgzip -9
を使用してください)。現時点ではこれを行っており、元のファイルが639MBであるのに対し、59MBのgzファイルを使用できます。