オンプレミス PostgreSQL を Azure DB for PostgreSQL に移行する

はじめに

オンプレミスのデータベースを Azure に移行するために Azure では Azure Database Migration Service (DMS) が提供されています。

今回は DMS を用いてオンプレミスにある PostgreSQL のデータベースを Azure Database for PostgreSQL に移行します。

実行環境

DMS はインターネット接続ができないので、 DMS のある Azure仮想ネットワークとオンプレミス環境に対してVPN を使用したサイト間接続を確立します。

構成

DMS構成
  • 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」のサイトからサンプルスキーマをダウンロードします。

www.postgresqltutorial.com

ダウンロードした 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については力業でエクスポート、インポートで移行するのが容易なのかもしれません。

執筆担当者プロフィール
三条 光暢

三条 光暢(日本ビジネスシステムズ株式会社)

Oracle、PostgreSQLを中心に各種データベースの設計・構築・運用を携わっています。

担当記事一覧