このページでは、Cloud SQL for PostgreSQL への同種 PostgreSQL 移行のクイック スタート移行を行う方法について説明します。
概要
クイック スタート移行は、同種 PostgreSQL シナリオ向けの軽量な継続的移行フローです。クイック スタート移行を使用すると、Database Migration Service は、データベースの移行に必要なすべてのもの(ネットワーキング コンポーネント(ネットワーク アタッチメント、サブネット、プライベート接続構成)、接続プロファイル、移行ジョブ)を自動的に設定できます。
クイック スタート移行では、既存の Cloud SQL for PostgreSQL インスタンスにデータを移動するか、移行の構成時に新しいインスタンスを作成できます。クイック スタート移行は、次の場合に最適です。
- データダンプの並列処理設定を正確に制御する必要がない基本的な移行。
- データベースをある Google Cloud プロジェクトから別のプロジェクトに移行する。クイックスタート移行を構成するときに、移行元とは異なるプロジェクトに移行先インスタンスを作成し、別のプロジェクトの Virtual Private Cloud(VPC)ネットワークにネットワーク アタッチメントとサブネットを作成するように Database Migration Service を設定できます。
-
Google CloudVirtual Private Cloud(VPC)ネットワークにプライベート IP アドレスがあるソースからの移行。たとえば、Compute Engine 上のセルフマネージド データベースや、プライベート ネットワーキングが有効になっている Cloud SQL for PostgreSQL インスタンスなどです。
外部でホストされているソース Google Cloud は、VPC ネットワーク内のプライベート IP アドレスでアクセスできるように、追加のネットワーク コンポーネント(Cloud VPN 接続など)が必要になる場合があります。
- データベース接続でサポートされている方法は、Database Migration Service のプライベート接続構成を使用した Private Service Connect インターフェースのみです。ソース データベースには、VPC ネットワークで割り当てられたプライベート IP が必要です。他の同種移行元接続方法(パブリック IP 許可リスト、リバース SSH トンネル、VPC ピアリングなど)は、クイック スタート移行ではサポートされていません。
クイック スタート移行の詳細については、Database Migration Service のドキュメントのクイック スタート移行をご覧ください。
始める前に
- クイック スタートの移行でシナリオを完全にサポートできるかどうかを確認します。Database Migration Service のドキュメントのクイック スタート移行の制限事項をご覧ください。
-
Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- Database Migration Service、Compute Engine、Network Connectivity Center、Cloud SQL Admin API を有効にします。
必要なロール
Database Migration Service を使用して Cloud SQL for PostgreSQL へのクイック スタート移行を実行するために必要な権限を取得するには、関連するプロジェクトで移行に関与するアカウントに必要な Identity and Access Management(IAM)ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、IAM ドキュメントのアクセス権の管理をご覧ください。
移行元プロジェクトのロールと権限
ソース データベースが存在する Google Cloud プロジェクトの特定のアカウントに、次のロールを付与します。
- 移行を実行するユーザー アカウントの場合: Compute ネットワーク管理者(
roles/compute.networkAdmin) - 宛先プロジェクトの Database Migration Service サービス アカウントの場合:
Compute ネットワーク閲覧者(
roles/compute.networkViewer)Database Migration Service サービス アカウントは、Database Migration Service API を有効にしたときに作成されます。このアカウントに関連付けられたメールアドレスは自動的に生成され、変更できません。このメールアドレスの形式は次のとおりです。
service-DESTINATION_PROJECT_NUMBER@gcp-sa-datamigration.iam.gserviceaccount.com
これらの事前定義ロールには、Database Migration Service を使用したクイック スタート移行の一環として、移行元データベース プロジェクトで接続を設定するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限(ソース)」セクションを開いてご確認ください。
必要な権限(ソース)
Database Migration Service で同種のクイック スタート移行を行うには、次の権限が必要です。
移行を実行するユーザー アカウントの場合:
compute.networks.*compute.subnetworks.*compute.networkAttachments.*
宛先プロジェクトの Database Migration Service サービス アカウントの場合: compute.networkAttachments.get。
移行先プロジェクトのロールと権限
移行を実行するユーザー アカウントに、宛先データベースが存在する Google Cloud プロジェクトで次のロールを付与します。
-
データベース移行管理者
(
roles/datamigration.admin) -
Cloud SQL 管理者
(
roles/cloudsql.admin)
これらの事前定義ロールには、Database Migration Service を使用したクイック スタート移行の一環として、移行先データベース プロジェクトに必要な移行コンポーネントを設定するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限(宛先)」セクションを開いてご確認ください。
必要な権限(宛先)
Database Migration Service で同種のクイック スタート移行を行うには、次の権限が必要です。
datamigration.*cloudsql.instances.createcloudsql.instances.deletecloudsql.instances.getcloudsql.instances.listcloudsql.instances.updatecloudsql.instances.connectcloudsql.instances.executeSqlcloudsql.instances.exportcloudsql.instances.importcloudsql.instances.logincloudsql.operations.getcloudsql.users.getcloudsql.users.listcloudsql.users.createcloudsql.users.updatecloudsql.users.delete
ソース データベースの構成
移行元の PostgreSQL データベースを構成する手順は次のとおりです。
- インスタンスに移行専用のユーザー アカウントを作成します。
- Cloud SQL for PostgreSQL ソースについては、Cloud SQL for PostgreSQL のドキュメントのユーザーを作成するをご覧ください。
- 他のソースについては、データベース プロバイダのドキュメントまたは PostgreSQL ドキュメントの ユーザーの作成と管理をご覧ください。
- 移行専用のユーザー アカウントに必要な権限を割り当てます。移行するデータベースごとに、次のコマンドを実行します。
-- Grant the REPLICATION attribute ALTER ROLE MIGRATION_USER REPLICATION; -- Grant database-level permissions. -- Repeat for each database you want to migrate. GRANT CONNECT, CREATE ON DATABASE DATABASE_NAME TO MIGRATION_USER; -- Grant schema-level usage. -- Repeat for each schema in each database you want to migrate. GRANT USAGE ON SCHEMA SCHEMA_NAME TO MIGRATION_USER;
次のように置き換えます。
- MIGRATION_USER は、移行ユーザー アカウントの名前に置き換えます。
- DATABASE_NAME は、移行するデータベースの名前に置き換えます。
- SCHEMA_NAME は、移行するデータベースのスキーマの名前に置き換えます。
- 移行ユーザー アカウントには、移行するテーブルに対する所有権アクセス権が必要です。このレベルのアクセス権を付与するには、次のいずれかを行います。
- 移行アカウントに
SUPERUSERPostgreSQL ロールを割り当てます。- Cloud SQL for PostgreSQL ソースの場合は、
cloudsqlsuperuserロールを割り当てます。 - 他のソースについては、
SUPERUSERロールを割り当てるか、同等の権限セットについてデータベース プロバイダのドキュメントをご覧ください。
- Cloud SQL for PostgreSQL ソースの場合は、
- 移行ユーザー アカウントを、テーブルを所有するユーザー グループに追加します。次のコマンドを実行します。
-- Grant table ownership. GRANT TABLE_OWNER_GROUP_NAME TO MIGRATION_USER;
次のように置き換えます。
- TABLE_OWNER_GROUP_NAME は、移行する各テーブルを所有するユーザー グループの名前に置き換えます。
- MIGRATION_USER は、移行ユーザー アカウントの名前に置き換えます。
- 移行アカウントに
- 主キーのないテーブルの場合: Database Migration Service は、変更データ キャプチャ(CDC)フェーズで主キーのないテーブルの
UPDATEオペレーションまたはDELETEオペレーションを複製しません。このようなオペレーションをレプリケーションに含める場合は、REPLICA IDENTITYを使用して主キーのないテーブルを変更します。ALTER TABLE TABLE_NAME REPLICA IDENTITY FULL; ALTER TABLE TABLE_NAME REPLICA IDENTITY USING INDEX INDEX_NAME;
次のように置き換えます。
- TABLE_NAME は、主キーのないテーブルの名前です。
- INDEX_NAME は、主キーのないテーブルの行を追跡できる一意のインデックスです。
- データベース フラグを使用してレプリケーション設定を構成します。
セルフマネージド ソース
データベース フラグの変更を保存するには、データベースの完全な再起動が必要です。次の例では、フラグ値を変更する SQL クエリを使用します。SQL クエリを直接実行できない場合は、プロバイダのドキュメントでこれらのフラグを変更する手順をご確認ください。
wal_levelパラメータをlogicalに設定します。次のコマンドを実行します。ALTER SYSTEM SET wal_level = 'logical';
wal_sender_timeoutパラメータを0に設定します。この値は、非アクティブなレプリケーション接続を終了するために使用するタイムアウト メカニズムを無効にします。次のコマンドを実行します。ALTER SYSTEM SET wal_sender_timeout = 0;
max_replication_slotsパラメータを使用して、レプリケーション スロットの最大数を構成します。このパラメータには、移行ジョブごとに移行するデータベースの数とテーブル同期用の予約分を合計した値を設定する必要があります。たとえば、5 つのデータベースを移行し、移行元インスタンスに 2 つの移行ジョブが作成されている場合、レプリケーション スロットの数は、すでに使用されているレプリケーション スロットの数に加えて、少なくとも
5 * 2 = 10にする必要があります。このパラメータを設定するには、次のコマンドを実行します。
ここで、NUMBER_OF_SLOTS はレプリケーション スロットの最大数を表します。ALTER SYSTEM SET max_replication_slots = NUMBER_OF_SLOTS;
max_wal_sendersパラメータは、max_replication_slotsとインスタンスですでに使用されている送信者の数を合計した値以上に設定します。たとえば、
max_replication_slotsパラメータが10に設定されていて、すでに 2 つの送信者を使用している場合、同時に実行される WAL 送信者プロセスの数は10 + 2 = 12になります。このパラメータを設定するには、次のコマンドを実行します。
ここで、NUMBER_OF_SENDERS は同時に実行されている WAL 送信者プロセスの数を表します。ALTER SYSTEM SET max_wal_senders = NUMBER_OF_SENDERS;
max_worker_processesは、移行するデータベースの数と、インスタンスですでに使用されているmax_worker_processesの数を合計した値以上に設定します。このパラメータを設定するには、次のコマンドを実行します。 ここで、NUMBER_OF_PROCESSES は移行されるデータベースの数を表します。ALTER SYSTEM SET max_worker_processes = NUMBER_OF_PROCESSES;
Cloud SQL for PostgreSQL ソース
Cloud SQL の移行元の場合、 Google Cloud コンソールでデータベース フラグを構成します。設定を有効にするには、データベース フラグを変更した後にインスタンスを再起動する必要があります。Cloud SQL でデータベース フラグを設定する方法については、Cloud SQL ドキュメントのデータベース フラグを構成するをご覧ください。
cloudsql.logical_decodingフラグをonに設定します。wal_sender_timeoutパラメータを0に設定します。この値は、非アクティブなレプリケーション接続を終了するために使用するタイムアウト メカニズムを無効にします。max_replication_slotsパラメータを使用して、レプリケーション スロットの最大数を構成します。このパラメータには、移行ジョブごとに移行するデータベースの数とテーブル同期用の予約分を合計した値を設定する必要があります。たとえば、5 つのデータベースを移行し、移行元インスタンスに 2 つの移行ジョブが作成されている場合、レプリケーション スロットの数は、すでに使用されているレプリケーション スロットの数に
5 * 2 = 10を加えた数以上にする必要があります。max_wal_sendersパラメータを、max_replication_slotsとインスタンスですでに使用されている送信者の数を合計した値以上に構成します。たとえば、
max_replication_slotsパラメータが10に設定されていて、すでに 2 つの送信者を使用している場合、同時に実行される WAL 送信者プロセスの数は10 + 2 = 12になります。max_worker_processesは、移行するデータベースの数と、インスタンスですでに使用されているmax_worker_processesの数を合計した値以上に設定します。
クイック スタート移行を作成して実行する
クイック スタート移行を使用すると、新しい Cloud SQL インスタンスを作成してデータベースを移行するか、既存のインスタンスにデータベースを移行できます。
新しいインスタンスのクイック スタート移行
新しい Cloud SQL for PostgreSQL インスタンスを作成して、データベースをすぐに移行する手順は次のとおりです。
- [インスタンス] ページに移動します。
- [インスタンスを作成] > [既存のデータベースから] をクリックします。
- [既存のデータベースを移行する] ウィンドウで、[PostgreSQL の移行をクイック スタートする] を選択し、[続行] をクリックします。
Database Migration Service のクイック スタート移行フォームが開きます。
- [移行を構成する] セクションで、次の操作を行います。
- [移行先リージョン] メニューから、移行先 Cloud SQL for PostgreSQL インスタンスのリージョンを選択します。
- [移行接頭辞] ボックスに、クイック スタート移行用に作成されたすべての移行エンティティ(接続プロファイル、プライベート接続構成、ネットワーク アタッチメントとそのサブネット、移行ジョブ)の名前に追加される人間が読みやすい文字列を入力します。
- [構成タイプ] メニューから、次のいずれかを選択します。
- 既存の接続構成: Private Service Connect インターフェース メソッドを使用するネットワーク アタッチメントとプライベート接続構成がすでにある場合は、このオプションを選択します。このオプションは、以前にクイック スタート移行を使用し、同じネットワーキング リソースを再利用する場合に最適です。
- 新しい接続構成: このオプションを選択すると、移行元データベースの VPC ネットワークに新しいネットワーク アタッチメントとネットワーク アタッチメント サブネットが作成されます。プライベート接続構成は、宛先インスタンスと同じプロジェクトに作成されます。
[続行] をクリックします。
- [ソースを接続] セクションで、次の操作を行います。
- ソース データベースのホスト名またはプライベート IP アドレスを入力します。ソース データベースのアドレスが、ソース VPC ネットワークから到達可能である必要があります。
- ホストへのアクセスに使用するポートを入力します。デフォルトの PostgreSQL ポートは
5432です。 - 移行元データベースの移行専用アカウントのユーザー名とパスワードを入力します。
- [暗号化タイプ] メニューから、次のいずれかを選択します。
- なし: 移行元データベースで SSL/TLS 暗号化接続が必要ない場合。
- 必須: ソース データベースで SSL/TLS 暗号化接続が必要な場合。このオプションでは、証明書の検証は必要ありません。
- [移行するデータベース] メニューで、[カスタマイズ] をクリックします。サイドパネルを使用して、Cloud SQL for PostgreSQL に移行するデータベースのみを選択します。 [続行] をクリックします。
- [送信先を構成する] セクションで、次の操作を行います。
- [移行先インスタンス タイプ] メニューから、[新しいインスタンス] を選択します。
Database Migration Service は、新しいインスタンスにデフォルトの Cloud SQL for PostgreSQL 構成を使用します。[カスタマイズ] をクリックして、マシンタイプ、ゾーンの可用性、データ保護設定などのインスタンス機能を調整します。インスタンス構成の詳細については、インスタンスを作成するをご覧ください。
[パスワード] フィールドに、デフォルトの
postgresql管理ユーザーのパスワードを入力します。Database Migration Service は、このユーザーとして接続してデータを移行します。 - [移行先インスタンス タイプ] メニューから、[新しいインスタンス] を選択します。
- [移行を開始 ]をクリックします。
Database Migration Service が移行ジョブを作成し、移行プロセスを開始します。移行の進行状況は、Database Migration Service の移行ジョブの詳細でモニタリングできます。詳細については、Database Migration Service のドキュメントの移行ジョブを管理するをご覧ください。
既存のインスタンスのクイック スタート移行
既存の Cloud SQL インスタンスにデータベースを移行する手順は次のとおりです。
- [インスタンス] ページに移動します。
- データベースの移行先にする Cloud SQL インスタンスを選択します。
- インスタンスの詳細ページで、[データベースを移行] をクリックします。
Database Migration Service のクイック スタート移行フォームが開きます。
- [移行を構成する] セクションで、次の操作を行います。
- [移行先リージョン] メニューから、移行先 Cloud SQL for PostgreSQL インスタンスのリージョンを選択します。
- [移行接頭辞] ボックスに、クイック スタート移行用に作成されたすべての移行エンティティ(接続プロファイル、プライベート接続構成、ネットワーク アタッチメントとそのサブネット、移行ジョブ)の名前に追加される人間が読みやすい文字列を入力します。
- [構成タイプ] メニューから、次のいずれかを選択します。
- 既存の接続構成: ソース データベースの VPC ネットワークに Private Service Connect インターフェースを使用するネットワーク アタッチメントとプライベート接続構成がすでにある場合は、このオプションを選択します。このオプションは、以前にクイック スタート移行を使用し、同じネットワーキング リソースを再利用する場合に最適です。
- 新しい接続構成: このオプションを選択すると、移行元データベースの VPC ネットワークに新しいネットワーク アタッチメント、ネットワーク アタッチメント サブネット、プライベート接続構成が作成されます。
[続行] をクリックします。
- [ソースを接続] セクションで、次の操作を行います。
- ソース データベースのホスト名またはプライベート IP アドレスを入力します。ソース データベースのアドレスが、ソース VPC ネットワークから到達可能である必要があります。
- ホストへのアクセスに使用するポートを入力します。デフォルトの PostgreSQL ポートは
5432です。 - 移行元データベースの移行専用アカウントのユーザー名とパスワードを入力します。
- [暗号化タイプ] メニューから、次のいずれかを選択します。
- なし: 移行元データベースで SSL/TLS 暗号化接続が必要ない場合。
- 必須: ソース データベースで SSL/TLS 暗号化接続が必要な場合。このオプションでは、証明書の検証は必要ありません。
- [移行するデータベース] メニューで、[カスタマイズ] をクリックします。サイドパネルを使用して、Cloud SQL for PostgreSQL に移行するデータベースのみを選択します。
- [移行を開始 ]をクリックします。
Database Migration Service が移行ジョブを作成し、移行プロセスを開始します。移行の進行状況は、Database Migration Service の移行ジョブの詳細でモニタリングできます。詳細については、Database Migration Service のドキュメントの移行ジョブを管理するをご覧ください。
移行を完了する
アプリケーションを新しい Cloud SQL インスタンスに切り替える場合は、次の手順で移行を完了します。
- 移行元データベースに対するすべての書き込みオペレーションを停止します。読み取り専用モードに切り替えて、運用機能を維持できます。
- 移行ジョブをプロモートします。
- 省略可: 移行データの完全性を検証します。