RDSからローカルにデータ移行(SQLServer)

こんにちは。
ネクストスケープの開發@mamikaihatsu)です。

前回の記事で、ローカルのSQLServerをRDSへデータ移行をしましたが、今回はその逆を。
RDS(SQLServer)のデータをバックアップし、ローカルでリストアを行います。
ダウンロードしたバックアップファイルをそのまま利用できないので、その修正方法も記載しております。


本記事環境

移行元DB(Alibaba Cloud)

  • Windows Server 2016

移行先DB(ローカル)

  • Windows Server 2016

手順

バックアップ(Alibaba Cloud)

  • RDSのバックアップ
  • バックアップデータのダウンロード

リストア(ローカル)

  • ダウンロードファイルの修正
  • リストア

バックアップ(Alibaba Cloud)

RDSでは、デフォルトで自動バックアップが設定されており、作成時に初回フルバックアップが行われます。

RDSのバックアップ

■バックアップ履歴
今までのバックアップについては、
管理コンソールのRDS から、バックアップとリカバリ > バックアップリスト から
確認することが出来ます。


バックアップタイプに「フル」「増分」と記載されています。

(補足)SQLServerのバックアップについて
SQLServerでは、
・フルバックアップ(Full Backup)
・差分バックアップ(Differentail Backup)
   ※AlibabaCloudのドキュメントではIncremental(増分) Backupと表現されていますが
    差分とは別かのように混乱しかねない為、本記事では一般的な表現の[差分]で記載します。
・トランザクションログバックアップ(Transaction log Backup)
があり、これらのバックアップの取り方については、
一定期間ごとにフルバックアップを取り、その間の期間は差分バックアップを取る
フルや差分、時にはこれらの間にトランザクションログをバックアップを取り
定期的にトランザクションログが肥大しないようにログファイル内の空き容量確保の為に
圧縮をかけるのが一般的かなと思います(かなり端折って書いてますが)

■バックアップ設定
バックアップとリカバリ > バックアップサイクル から、現在の設定内容を確認することが出来ます。

各項目が分かりづらいので、どのバックアップの設定なのかは下記。

フル・差分バックアップ
・保持する回数
・バックアップサイクル
・バックアップ時刻
・次回のバックアップの時刻
トランザクションログバックアップ
・バックアップ頻度
・ログ保存日数

フル・差分バックアップについて
初期値は毎日バックアップして7日間保持で設定されています。
バックアップタイプについては、バックアップ時に
フル -> 差分 -> 差分 ( -> フル…)のサイクルで行われるようになっています。
ただし、初回のみフルバックアップが1回行われた後にループとなります。
(フル-> フル -> 差分 -> 差分 -> フル -> 差分 -> 差分 -> フル… )
これらのバックアップのタイミングで、同時にトランザクションログを圧縮しています。

トランザクションログのバックアップについて
初期値はデータのバックアップと同様(毎日)にバックアップして7日間保持で設定されています。
30分ごとにログを取ることも可能です。

バックアップデータのダウンロード

リカバリさせたい日の
フルバックアップデータ、必要あれば差分データ
時間での復元が必要な場合はログデータをダウンロードします。

例えば、
・3月2日のデータにリカバリさせたい場合は、
3月2日がフルバックアップなので3月2日のデータをダウンロード
・3月4日のデータにリカバリさせたい場合は、
3月4日は差分バクアップなので、3月2日~4日のデータをダウンロード
・3月3日18:00のデータにリカバリさせいたい場合は
3月2日~3日のデータと、バイナリログリスト(トランザクションログ)から3日のバックアップ移行~18:00が含まれるログまでをダウンロード

そう、通常のSQLServerのリストアの時と同じですね。




リストア(ローカル)

ダウンロードファイルの修正

■フルバックアップと差分バックアップのファイル
ダウンロードしたファイルは下記のようにzipファイル内にBAKファイルが入っています。
ファイル名は類似しており、ほぼ見分けがつかないです・・・。

一緒にJsonやiniファイルも梱包されていますが、内容をザックリみた感じだと
バックアップデータをRDSにリカバリする時に利用するものなのかな?

■トランザクションログのバックアップファイル
「xxxxxxxx.zip.log」という拡張子になっているので、まずは「.log」を削除しzipファイルにします。

zipファイルの中に「.lbak」という拡張子のファイルがあります。
拡張子をバックアップファイルとして読み込めるように「.log」などに変更することで、トランザクションログとして読み込めるようになります。

リストア

リストア方法については、通常のSQLServerの場合と同じです。
ダウンロードしたフル+差分+トランザクションログ のファイルから
3月3日18:00の時点に、無事復元することができました。


最後に

日本語ドキュメントみたり、Globalドキュメント見たり、リンク先のPDF見たり、サポート問い合わせたりと調べ事が多かったです。
それぞれで解決したこともありましたが、やっぱり実際に検証したほうが早いなと感じました。
最初は「バイナリログ」は「トランザクションログ」じゃないのではと思っていたのですが
拡張子を変えてみてSSMSで読み込んで確認したら、「トランザクションログ」だと発覚。
後はサクッっと復元できたので、ほんっっとに良かったです・・・!
他のクラウドでもやってるように、管理コンソールの言語はEnglishにしてGlobalドキュメントをメインで見たほうがいいかな。