ノート:

レプリケーションを使用した、MySQLのGoogle Cloud Platform CloudSQLのOracle Cloud Infrastructure MySQL Heatwaveへの移行

イントロダクション

このチュートリアルでは、Google Cloud Platform CloudSQL for MySQLをOracle Cloud Infrastructure (OCI) MySQL Heatwave Database Serviceにライブ移行する方法について説明します。この記事のヘルプでは、2つの異なるクラウド・プロバイダ間でMySQLレプリケーションを使用する方法を理解でき、これはOCI Heatwaveへの移行を成功させるためのドキュメントとして機能します。このチュートリアルでは、次の製品を使用します:-

  1. MySQLのGCP CloudSQL
  2. MySQLオンライン・トランザクション処理(OLTP)のヒートウェーブ
  3. OCI Object Storage
  4. OCI Compute as Bastion
  5. MySQLシェル

目的

MySQLのGoogle Cloud Platform CloudSQLをMySQL Heatwave Database Serviceに接続して、OCI DB Systemへのインバウンド・レプリケーションを開始します。Google Cloud PlatformとMySQL間の接続の概要について説明しますが、Google Cloud Platform CloudSQLとMySQL Heatwave間のネットワークの可能性の詳細は公式ドキュメントで参照できます。

アーキテクチャ

次に、ソリューションの概要レベルのアーキテクチャの例を示します。

イメージ・メイン

点線は、データのフローを表します。つまり、GCPのMySQLのクラウドSQLから初期データ・セットのオブジェクト・ストレージへのフローです。データがオブジェクト・ストレージで使用可能になったら、OCI MySQL Heatwave DB Systemで提供されるレプリケーション・チャネルをさらに使用します。

前提条件

このチュートリアルの一部として、インバウンド・レプリケーションを使用します。インバウンド・レプリケーションを使用すると、MySQL Heatwave Database Serviceで構成されたレプリケーション・チャネルを使用して、ある場所から別の場所にトランザクションを送信できます。ソースは、オンプレミス、Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platformなど、異なる場合があります。このチュートリアルでは、MySQLのGoogle Cloud Platform Cloud SQLに焦点を当てており、ターゲットはMySQL Heatwave Database Serviceです。

MySQLインバウンド・レプリケーションの概要の詳細は、ここを参照してください。このチュートリアルは、ソース構成、レプリケーション・ユーザーの作成、レプリケーション・チャネルの作成および制限に関する詳細な説明も記載されているため、役に立ちます。

移行のプロセス全体を次の概要レベルのステップに分割しています。

  1. MySQL用の既存のGoogle Cloud PlatformのCloud SQLへのアクセス
  2. MySQLに対するGoogle Cloud PlatformのクラウドSQLの準備
  3. MySQLシェルを使用したOCI上の要塞
  4. Google Cloud Platform Cloud SQL for MySQLとOCI Heatwave DB System間のネットワークに関する考慮事項
  5. OCIでのオブジェクト・ストレージ・バケットの構成
  6. OCIオブジェクト・ストレージへのデータのエクスポート
  7. OCIでの新規DBシステムの作成
  8. OCIでのレプリケーション・チャネルの作成

タスク1: MySQLの既存のGoogle Cloud Platform Cloud SQLへのアクセス

移行の目的で、Google Cloud PlatformのCloud SQLでホストされているサンプル・データベースをMySQLに使用しています。既存のMySQLインスタンスは、Google Cloud Platformで許可されるパブリック・サブネットでホストされているため、これをソース・データベースとして使用しています。MySQLのGoogle Cloud Platform CloudSQLで、MySQLバージョン8.0のエンタープライズ・エディションが実行されているとします。

イメージ 1

イメージ 2

パブリックIPがわかると、IPアドレスをホワイトリストに登録して、MySQLクライアントと簡単に接続できます。MySQLシェルまたはgcloudユーティリティを使用してデータベースに接続することもできます。Google Cloud Platform Cloud SQLのネットワーキング・セクションにMySQLを追加して、「変更の保存」をクリックすると、パブリックIPのホワイトリストを作成できます。

イメージ 3

ノート: ここでも追加される他のIPがあります。これについては、後の項で説明します。

接続できたら、Google Cloud Platform CloudSQLのMySQLインスタンスに対して既存のデータベースを問い合せることができます。移行の目的のために、サンプル・データベースSakilaのみに重点を置きます。

イメージ 4

タスク2: MySQL用のGoogle Cloud Platform Cloud SQLの準備

インバウンド・レプリケーションを使用しているため、ソース・サーバーで2つのステップを実行する必要があります。レプリケーションに使用するユーザーを作成する必要があります。また、ソース・サーバーでGTIDが有効になっていることを確認する必要もあります。GTID (グローバル・トランザクション識別子)を使用すると、元のソース・サーバーでコミットされると、すべてのトランザクションを識別して追跡できます。同じトランザクションがターゲット・レプリカに適用されます。

  1. レプリケーション・ユーザーを作成し、次のコマンドを使用してロールを割り当てます。

    mysql> create user repl@'%' IDENTIFIED BY 'yourreplpassword' REQUIRE SSL;
    mysql> grant replication slave on *.* to repl@'%';
    mysql> select user from mysql.user;;
    
  2. GTIDが有効になっていることを確認します。デフォルトではGTIDは有効になっていますが、有効にしていない場合は有効にできます。

    mysql>show global variables like 'gtid%';

    イメージ 5

タスク3: MySQLシェルを使用したOCIへの要塞のデプロイ

Oracle Cloud Infrastructureでは、MySQL DBシステムのエンドポイントにインターネットから直接アクセスすることはできません。これはセキュリティの強化によるもので、構成されたVCNのプライベート・エンドポイントを使用してデプロイされます。そのため、プライベート・エンドポイントにアクセスするには、コンピュート・インスタンス、VPN、要塞またはネットワーク・ロード・バランサを使用してOCI MySQL Heatwave Database Serviceに接続する必要があります。

前述のいずれかのオプションを選択できます。この場合、MySQL Heatwave Database ServiceのBastionとして機能するコンピュート・インスタンスを使用します。その他のオプションの使用方法は、こちらを参照してください。

コンピュート・インスタンスを使用するため、プライベート・サブネットがMySQL Heatwave Database ServiceをホストするVCNのパブリック・サブネットにコンピュートをデプロイする必要があります。コンピュート・インスタンスの構成中は、MySQLシェルまたはMySQLクライアントのインストールおよびMySQLのGoogle Cloud Platform Cloud SQLへの接続にのみ使用されるため、コンピュートのリソース構成について心配する必要はありません。

コンピュート・インスタンスの作成方法については、こちらを参照してください。

次の図に示すように、MySQL Heatwave Database ServiceがホストされるVCNのパブリック・サブネットにコンピュート・インスタンスを作成しました。この要塞サーバーは、OCIとGoogle Cloud Platformの間の中間として機能し、両方のMySQLインスタンスにアクセスできます。MySQLデータベース・インスタンスに接続するには、MySQLシェルまたはMySQLクライアントを使用できます。

イメージ 6

次のコマンドを実行して、Mysqlシェルをインストールします。

`sudo yum install mysql-shell`

詳細は、ドキュメンテーションも参照してください。

タスク4: MySQLとOCI MySQL Heatwave Database ServiceのクラウドSQL間のネットワークに関する考慮事項の確認

ここでの重要なことは、ソース・サーバーとターゲット・サーバー間で通信が正常に確立されるようにすることです。

Google Cloud Platformコンソールでは、要塞インスタンスのパブリックIPもホワイトリストに登録する必要があります。これは、前述と同じプロセスを使用して、データベースをMySQLクライアントに接続できます。

OCIコンソールでは、MySQLVCNのパブリック・サブネットでホストされているBastionコンピュート・インスタンスと、同じVCN内のプライベート・サブネットでホストされているMySQL Heatwave Database Serviceの間の通信を確立する必要があります。トラフィックを許可する必要があり、プライベート・サブネットでイングレス・ルールを開いて接続を許可できます。

タスク5: OCIでのオブジェクト・ストレージ・バケットの構成

OCI上のオブジェクト・ストレージを構成して、MySQLのGoogle Cloud Platform CloudSQLから初期データ・ダンプを格納する必要があります。これは1回かぎりのアクティビティで、このデータはMySQL Heatwave Database Serviceでデータベースを作成するために使用されます。

OCIでのバケットの作成の詳細は、バケットの作成を参照してください。

イメージ 7

前述のバケットが作成されたら、オブジェクト・ストレージ・バケットと要塞インスタンス間のリンクを確立する必要があります。この目的のために、MySQLシェルで使用されるoci構成ファイルを使用します。

ノート: key_fileパラメータは、APIキーの作成時にOCIコンソールで生成された秘密キーの場所で更新する必要があります。

タスク6: OCIオブジェクト・ストレージへのデータのエクスポート

BastionサーバーでMySQL Shellユーティリティを使用して、MySQLのGoogle Cloud PlatformのクラウドSQLからデータをエクスポートします。MySQLシェル・ユーティリティは、インスタンスを一度にエクスポートして様々なオプションを提供するのに役立つ非常に強力なツールです。

この演習では、Google Cloud PlatformのMysqlデータベース用CloudSQLからOCIオブジェクト・ストレージにスキーマをエクスポートします。

まず、要塞コンピュートからMySQLインスタンスに接続します。

イメージ 12

util.dumpSchemas(["sakila"], "", { osBucketName: "MysqlBucket", osNamespace: "orasenatdpltintegration01", ocimds: true, ociParManifest: true, threads: 8, compatibility: ["force_innodb", "skip_invalid_accounts", "strip_definers", "strip_restricted_grants",  "strip_tablespaces"], dryRun: "true"})

残りのオプションは要件に基づいて使用でき、詳細はここを参照してください。

イメージ 13

予行演習が完了したら、出力を調べて問題を解決します。互換性の問題がない場合は、次のようにdryRunなしで実行します:-

イメージ 14

エクスポート・アクティビティに関する詳細情報を提供し、期間も提供します。サンプル・データベースであるため、約45,000件のレコードがあり、すぐに終了しました。

プロセスが成功すると、データはオブジェクト・ストレージの一部であるバケットに格納されます。

イメージ 15

タスク7: OCIでの新規DBシステムの作成

MySQL DBシステムの構成方法の詳細は、DB Systemの作成を参照してください。

留意する必要があるのは、オブジェクト・ストレージにすでにデータが存在するため、DBシステムの構成に使用しましょう。データを後でロードすることもできますが、このオプションを使用すると多くの時間を節約できます。このオプションを使用するには、PARリクエストを作成する必要があります。

イメージ 16

イメージ 17

ここで生成されたURLが次のように使用されるため、保存したことを確認してください。

イメージ 18

PAR URLを指定すると、MySQL DBシステムはSakilaデータベースで自動的に作成されます。

検証するには、次のコマンドを実行します。

イメージ 19

これによって、ターゲットDBシステムにソース・データベースがあります。ここで、ソースとターゲット間のレプリケーションを作成します。

タスク8: OCIでのレプリケーション・チャネルの作成

レプリケーション・チャネルを使用して、ソース・データベース・システムをターゲット・データベース・システムに接続します。すべてのトランザクションは、これらのチャネルを使用してコピーされます。これらのチャネルの作成は、ソースとターゲットに関する詳細を提供する必要があるため、かなり簡単です。暗号化された接続を使用することが常に推奨されます。そのため、ユーザーを作成するときに、前述のステップでキーワードSSLを指定しました。

レプリケーション・ソースが異なる可能性があるため、パブリック・クラウド・プロバイダによって異なるチャネル・フィルタも許可します。詳細は、こちら参照してください。

次の図は、OCIでレプリケーション・チャネルを作成する際の様々なオプションを示しています。ソース・ホスト名またはパブリックIPアドレスをポート番号とともに指定する必要があります。前に作成したReplユーザーを使用して認証します。

イメージ 20

イメージ 21

また、レプリケーション用に作成したターゲットdbシステムを指定し、レプリケーション・フィルタを使用すると、必要に応じてドロップダウン・メニューからレプリケーション・フィルタを選択するオプションが提供されます。

エクスポート後のソース・システムにこれ以上ロードがない場合は、レプリケーション・チャネルがアクティブ化されて完了します。ただし、GTIDの不一致や必要なアクションのために負荷が一貫していない可能性があります。レプリケーション・チャネルの様々な段階があります。詳細はここを参照してください。

インバウンド・レプリケーション構成中に発生する可能性がある最も一般的なエラー・メッセージの詳細は、トラブルシューティング・ガイドを参照してください。

次の図に示すように、Google Cloud Platformソースにダミー・データを挿入します。

イメージ 21

MySQL Heatwave Database Serviceでサンプル・データベースを問い合せます。

イメージ 22

コンソールでは、ソースとターゲットの間にラグがゼロで、トランザクションがコピーおよびコミットされることがわかります。したがって、障害回復と移行の両方の目的でレプリケーションチャネルを使用できます。適切な計画およびアプリケーションのダウンタイムに基づいて、カットオーバー・アクティビティを実行し、OLTPトランザクションおよび分析ワークロードのワンストップ・ソリューションであるMySQL Heatwave Databaseサービスを使用できます。

次のステップ

このチュートリアルでは、OCI MySQL Heatwave Database Serviceによって、インバウンド・レプリケーションを使用するきわめて簡単なメカニズムが提供されています。複数のソースをサポートし、これらのソースに関するレプリケーション・チャネル・フィルタも提供します。インバウンド・レプリケーションを使用すると、データセットをOracle Cloudに持ち込み、その熱波サービスを使用できます。これだけではなく、MySQL Heatwave Lakehouseが導入され、大量のデータをテラバイト単位で複数の形式で取り込むことができます。MySQL Heatwave Database Serviceの詳細と、インメモリー問合せアクセラレータを提供して問合せのパフォーマンスを最大化する方法を確認できます。

謝辞

その他の学習リソース

docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。