woshidan's blog

そんなことよりコードにダイブ。

データベースのデータのバックアップの種類について

データベーススペシャリストの問題を見ていて、データの更新範囲や内容によって、差分バックアップと増分バックアップの使い分けを検討する話が面白かったのでメモ。

なお、最初に断っておきますが、リストア周りについて実際業務で担当したことはなく、興味があったので調べたことをまとめているだけなので、何かあったらマサカリください。

差分バックアップと増分バックアップとは

インターネットで検索したら、記事によって定義が揺らいでいてそのまま使って大丈夫か、という感じだったので、

http://www.atmarkit.co.jp/ait/articles/0306/14/news003.html https://www.backstore.jp/blog/2016/08/17/differential_and_increment_backup/ http://qiita.com/Tocyuki/items/f34ca92b8bf6e0014923

あたりを参考にまずこの記事の中でいちおう言葉の定義をしておきます。それで肝心の定義ですが、

  • 毎回、最後にフルバックアップを取った時点からのデータの差分のバックアップを取るものを 差分バックアップ
  • 最初にバックアップを取るときは、最後にフルバックアップを取った時点からのデータの差分となるが、それ以降は前回バックアップを取った時からの差分になるものを 増分バックアップ

とします。図にすると下図のようになります。

差分バックアップと増分バックアップの使い分け

データの更新され方による使い分けの話

取り上げられていたのは、平成28年度の午後Iの問題なのですが、

  • 結構大きなテーブルで、一部だけが頻繁に更新されるテーブルのバックアップを取る場合
    • 更新範囲が重複しがちなことがわかっている場合、差分バックアップにすると増分バックアップより適用する必要のあるバックアップの量が小さくなる
  • 何かの履歴といった増えることはあっても後から更新されることがないテーブルのバックアップを取る場合
    • 差分バックアップにしてしまうとフルバックアップを取った時点から遠くなるにつれ一度にバックアップを取る量が増えてしまうので増分バックアップにする

という趣旨の内容で、いままで二種類あるけどよくわからないな、差分は容量が増えて悪いやつだ、みたいなゆるふわなイメージを持っていた自分には面白かったのでした。

運用に関するもの

www.backstore.jp www.atmarkit.co.jp

差分バックアップと増分バックアップの定義について調べていたら、そういえば、復旧作業に関する話も出てきていたのでこちらもメモ。

さて、問題に取り上げられていたような巨大な業務用システムのデータベースなどだったら、バックアップのデータをバックアップ用のサーバに転送する時間もバカにならないので上記のようなことを計算してみて考える必要がありますが、実際、ノートPC上のファイルの中身程度だったら毎回フルバックアップで十分ということもあります。

増分バックアップは復元時の各バックアップファイルを適用していく作業が煩雑だったり、途中のバックアップファイルが欠落した場合戻せなくなってしまったりするため、手動で管理する必要がある場合は大変そうです。

差分バックアップはそれぞれのタイミングでのバックアップのデータサイズが前節であげた場合以外は大きくなりがちで、バックアップを取りたいタイミングが増えるにつれて容量を圧迫しがちですが、更新作業に必要となるのは、フルバックアップ + 差分バックアップのファイルのみであり、手順もわかりやすく復旧処理が簡単だそうです。

実際のコマンドについて調べて書こうかと思ったけど、火傷しそうだったのでやめます。