okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

RDSのCopy DB Snapshotを使おう

先日、Redshiftの事をブログにしましたが、私個人にとっては使い続けるとお金が厳しそうです。
そんなわけで、今回は安定のRDS(使用するのはt1.micro)についてブログを書きたいと思います。
RDSの運用Tipsとして、日次で手動スナップショットを取得するスクリプトを見かけます。
※RDSで自動取得するものとは別で取得しているもので、Create DB Snapshotってやつです
『RDSで自動取得されるスナップショットはDBインスタンスが削除されてしまうと、スナップショットも削除される』という事がその大きな理由だと思います。
しかしながらこれにちょっとした問題があります。

スナップショットを2回取得しているので、I/O瞬断も2回発生しちゃう
※Multi-AZの方はスナップショットがスレーブから取得されるので、マスターには影響ないですよ

そんなケースではCopy DB Snapshotという、RDSで自動取得するスナップショットを手動スナップショットとしてコピーする機能が有効かなと思います。

以下、手順を紹介します。

手順(RDS Command Line Toolkitの場合)

以下の2つを指定するだけなので、とても簡単です。

  • -sオプション
    • コピー元となるスナップショットの名前を指定します
  • -tオプション
    • コピー先となるスナップショットの名前を指定します

※古いバージョンですと対応してなかったりするので、こちらから最新版を使ってくださいね。

$ rds-copy-db-snapshot -s rds:okochangdb-2013-02-18-11-49 -t copy-okochangdb-2013-02-18
DBSNAPSHOT  copy-okochangdb-2013-02-18  2013-02-18T11:50:13.496Z  okochangdb  2013-02-18T11:49:03.711Z  mysql  5  available  root  5.5.27  general-public-license  manual

自動取得するバックアップはDBインスタンス名に取得日がつくようです。
ちなみに自動取得されたバックアップの一覧を見たい場合は以下のようにすればOKです。

$ rds-describe-db-snapshots --snapshot-type automated

手順(Management Consoleの場合)

こちらも簡単です、Viewingを切り替えれば一目瞭然です。
f:id:okochang:20130219003555p:plain

あとはコピー先の名前を指定して作成するだけです。
f:id:okochang:20130219003604p:plain

まとめ

この手順で作ったスナップショットはDBインスタンスを削除しても残り続ける事を確認出来ました。
面倒でまだスクリプトにはしていないのですが、これを日次で実行するようなスクリプトを作ればRDSが削除されても使えるし、I/Oの瞬断も1度だけなので良いですね。
特別な理由がない限りはこっちを使う方がスマートな感じがします。