はじめに
オンプレミスのデータベースを Azure に移行するために Azure では Azure Database Migration Service (DMS) が提供されています。
今回は DMS を用いてオンプレミスにある PostgreSQL のデータベースを Azure Database for PostgreSQL に移行します。
実行環境
DMS はインターネット接続ができないので、 DMS のある Azure仮想ネットワークとオンプレミス環境に対してVPN を使用したサイト間接続を確立します。
構成
- Azure Database for PostgreSQL
- バージョンは 14
- オンプレミスのPostgreSQLより新しいバージョンにする
- Azure サービスとの接続を許可する
- Database Migration Service
- Azure 、オンプレミスのデータベースへ接続しデータを移行する
- VPN Gateway
- Azure仮想ネットワークとオンプレミス間で暗号化トラフィックを送信する
- Local Network Gateway
- ルーティング目的でオンプレミスの場所を表す
- Routing and Remote Access(RRSA)
- オンプレミス側のVPNデバイス
- Windows Server にて構成
- PostgerSQL
- Linux に PostgreSQL をインストールしインスタンスを作成する
- バージョンは 12
サンプルスキーマ
「POSTGRESQL TUTORIAL」のサイトからサンプルスキーマをダウンロードします。
ダウンロードした dvdrental.zip を解凍してオンプレミスの PostgreSQLサーバにアップロードします。
移行先データベースの作成
オンプレミスのPostgreSQLに新しいデータベースを作成しサンプルスキーマをインポートします。
インポート後にデータベースにログインしてテーブルが存在していることを確認します。
$ unzip dvdrental.zip ← dvdrental.tar ファイルが作成されます。
$ creatdb dvdrental
$ pg_restore -d dvdrental < dvdrental.tar
$ psql dvdrental
dvdrental=# \dt ← テーブルの一覧が表示されます。
dvdrental=# \q
移行先データベースの作成
postgresql クライアントから Azure Database for PostgreSQL にログインし、新しいデータベースを作成します。
$ psql -d postgres -U DBユーザー -h xxxxxxxxx.postgres.database.azure.com -p 5432
(DBユーザー、ホスト名は環境に合わせて記載してください)
postgres=# create database dvdrental_tgt;
postgres=# \q
サンプルスキーマの抽出
DMS はデータのみを移行するため、テーブル、シーケンスなどのデータベースオブジェクトはスキーマを抽出して、移行先のデータベースに適用します。
$ pg_dump -d dvdrental -s > dvdrentalSchema.sql
( -s オプションをつけることでデータを除く、スキーマの定義を抽出)
サンプルスキーマの適用
移行先のデータベースにスキーマをインポートします。
$ psql -d postgres -U DBユーザー -h xxxxxxxxx.postgres.database.azure.com -p 5432 < dvdrentalSchema.sql
(DBユーザー、ホスト名は環境に合わせて記載してください)
DMSインスタンスの作成
「リソース、サービス、ドキュメントの検索 (G + /)」から「azure database migration service」を検索し選択します。
「+ 作成」をクリックしてインスタンスの作成を開始します。
移行シナリオと Database Migration Service の選択
項目 | 設定値 |
ソースサーバの種類 | PostgreSQL |
ターゲットサーバーの種類 | Azure Database for PostgreSQL |
Database Migration Service | Database Migration Service |
移行サービスの作成
「基本」タブ
サブスクリプション、リソースグループ、移行サービス名、場所を指定します。
価格レベルはオンラインを使用する場合Premiumを使用します。
「ネットワーク」タブ
VPN接続されたネットワークを選択します。
作成内容を確認しインスタンスを作成します。
DMSプロジェクトの作成
前の手順で作成された DMS を開き「+ 新しい移行プロジェクト」をクリックして新しいプロジェクトを作成します。
新しい移行プロジェクト
項目 | 設定値 |
プロジェクト名 | 任意のプロジェクト名 |
ソースサーバーの種類 | PostgreSQL |
ターゲットサーバーの種類 | Azure Database for PostgreSQL |
移行アクティビティの種類 | オンラインデータの移行 |
PostgreSQL から Azure Database for PostgreSQL への移行プロジェクト ウィザード
「ソースの選択」タブ
項目 | 設定値 |
ソースサーバー名 | 192.168.21.111(オンプレミスのPostgreSQLサーバーの IPアドレス) |
サーバーポート | 5432 |
ユーザー名 | postgres |
パスワード | postgresユーザーのパスワード |
接続を暗号化する | SSL設定をしていない場合、チェックを外す |
「データベースの選択」タブ
移行対象とするデータベースを選択します。
「ターゲットの選択」タブ
項目 | 設定値 |
サブスクリプション | Azure DB for PostgreSQL のサブスクリプション |
Azure PostgreSQL | Azure DB for PostgreSQL のインスタンス名 |
データベース | dvdrental_tgt(移行先データベース) |
ユーザー名 | 移行を行うDBユーザー |
パスワード | 指定したDBユーザーのパスワード |
「サマリー」タブ
プロジェクト内容を確認して「プロジェクトの保存」をクリックします。
データ移行
作成した DMSプロジェクトを開き「+ 新しい活動」をクリックして新しいアクティビティを作成します。
PostgreSQL から Azure Database for PostgreSQL へのオンライン移行ウィザード
「ソースの選択」タブ
項目 | 設定値 |
ソースサーバー名 | 192.168.21.111(オンプレミスのPostgreSQLサーバーの IPアドレス) |
サーバーポート | 5432 |
データベース | dvdrental |
ユーザー名 | postgres |
パスワード | postgresユーザーのパスワード |
接続を暗号化する | SSL設定をしていない場合、チェックを外す |
「ターゲットの選択」タブ
項目 | 設定値 |
サブスクリプション | 使用中のサブスクリプション |
Azure PostgreSQL | Azure DB for PostgreSQL のインスタンス名 |
データベース | dvdrental_tgt(移行先データベース) |
ユーザー名 | 移行を行うDBユーザー |
パスワード | 指定したDBユーザーのパスワード |
「データベースの選択」タブ
移行対象のソースデータベース、移行先のターゲットデータベースを選択します。
「テーブルの選択」タブ
移行対象のテーブルを選択します。
「移行の設定の構成」タブ
- 同時に読み込むテーブルの最大数を指定する。(デフォルト 5 )
「サマリー」タブ
- 「活動名」を入力し「移行の開始」をクリック
移行
移行が開始されるとソースデータベースのバックアップが取得されます。
データベース名をクリックし、バックアップ状況を確認します。
バックアップが完了し全体の読み込みが完了すると「一括移行の開始」ができます。
一括移行を開始すると移行のためのステップが開始されます。
保留中の変更を適用することで移行が完了します。
DMSを使用したデータベースの移行について
今回は PostgreSQL の移行を行いましたが DMS では SQL ServerやMySQL にも対応しています。また、オンプレミスに限らず Amazon RDS からの移行も可能です。
ただ、残念ながらOracleには対応しておりません。Oracleについては力業でエクスポート、インポートで移行するのが容易なのかもしれません。