コンテンツに移動
デベロッパー

HarbourBridge とデータ検証ツールを使用した Cloud Spanner への移行

2021年8月26日
Google Cloud Japan Team

※この投稿は米国時間 2021 年 8 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。

最近、MySQL や PostgreSQL などの既存のオープンソース リレーショナル データベースから Google Cloud Spanner に移行して水平方向のスケーリングを有効化することに多くの関心が寄せられています。このタイプの異種データベース間移行は複雑なものになる場合がありますが、HarbourBridgeデータ検証ツールの 2 つのオープンソース ツールが役に立ちます。HarbourBridge は、MySQL や PostgreSQL からスキーマとデータを取り込み、それを Spanner に移行するスタンドアロン ツールです。Spanner でサポートされているデータ型や機能をマッピングし、サポートされていないものは無視します。データ検証ツールは、その名の通りの働きをします。ソースとターゲットのデータベースに接続する Python CLI ツールであり、マルチレベルの検証やカスタムクエリによって 2 つのテーブルのデータが一致することを確認します。今回はプロセスの簡単な概要をご紹介します。近日中にすべてのプロセスを網羅したチュートリアルを公開する予定ですので、そちらもご覧ください。

HarbourBridge

HarbourBridge をインストールするには、Google Cloud SDK、Go、GCC が必要です。

ツールをダウンロードしてインストールします。

読み込んでいます...

HarborBridge は、ダンプファイルに対して実行することも、データベースに直接接続することもできます。ダンプファイルを使用する場合、標準的な平文の pg_dump または mysqldump 形式ファイルである必要があります。ソースに直接接続されている場合、HarbourBridge はデータベースにクエリを発行してテーブル・スキーマとデータを取得します。

mydb という名前の PostgreSQL データベース ダンプに対してツールを使用するには、次を実行します。

読み込んでいます...

mydb という名前の MySQL データベース ダンプに対してツールを使用するには、オプションを -driver=mysqldump に置き換えます。

PostgreSQL データベース上で直接ツールを使用するには、-driver=postgres を設定し、環境変数 PGHOST、PGPORT、PGUSER、PGDATABASE を指定します。

読み込んでいます...

MySQL データベース上で直接ツールを使用するには、-driver=mysql を設定し、環境変数 MYSQLHOST、MYSQLPORT、MYSQLUSER、MYSQLDATABASE を指定します。

このツールは、環境変数 GCLOUD_PROJECT の Cloud プロジェクトを使用し、変換されたスキーマで Spanner インスタンスに新しいデータベースを作成し、データを読み込みます。また、スキーマ ファイル、セッション ファイル、レポート ファイル、ドロップ ファイルといった複数の出力レポート ファイルを作成します。これらのファイルには、ツールで実行された内容や、データやスキーマで発生したエラーに関する詳細な情報が含まれています。

HarbourBridge は、継続的なデータ移行や CDC を必要としない、約 100GB までの中規模なデータベースの移行に最適です。Spanner や大規模なデータベースへの継続的なデータ移行には、サードパーティ パートナーのプロダクト、Striim をおすすめします。Striim は CDC のストリーミングだけでなく、大量一括初期読み込みも実行できます。

データ検証ツール

データ検証ツール(DVT)をインストールするには、Google Cloud SDK、git、python3、python3-dev、pip、gcc、そしてオプションとして terraform が必要です。DVT は、デフォルトでは結果を標準出力に出力しますが、BigQuery に書き込むこともできます。レポート ハンドラとして BigQuery を活用し、出力の保存や確認を行うことをおすすめします。

読み込んでいます...

リポジトリをローカルマシンにクローンし、terraform フォルダにアクセスします。フォルダの中には、編集して BigQuery のデータセットや出力用のテーブルを作成するために使用する terraform ファイルがあります。また、Google Cloud SDK の bq コマンドライン ツールで result_schema.json ファイルを使用してテーブルを作成することもできます。

読み込んでいます...

これで DVT を pip でインストールできるようになりました。

読み込んでいます...

DVT を実行するには、まずソースとなる MySQL への接続を作成する必要があります(他のデータベースもサポートされています)。

読み込んでいます...

次に、対象の Cloud Spanner の接続を作成します。

読み込んでいます...

その後、検証を実行するには、検証タイプ、ソース接続、ターゲット接続、比較するテーブルのリスト、BigQuery 出力テーブルを指定します。

読み込んでいます...

BigQuery での出力は次のようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image2_PqW8MEc.max-400x400.max-400x400.png

デフォルトでは、列の型の検証には指定されたテーブルに対して簡単な COUNT(*) を実行します。場合によっては、代わりに各列の集計を実行する方が適切な場合もあります。--count columnName、--sum myFirstColumnName、--avg anotherColumnName を追加したり組み合わせたりすることで、異なるチェックを簡単に作成できます。他にも、DVT をより柔軟に使用するための集計、フィルタ句、さらにはカスタム SQL が用意されています。それぞれのタイプについての詳しい情報は、GitHub で DVT のページをご覧ください。

-c validate.yaml 引数を追加すると、DVT は指定された構成を保存した yaml ファイルを代わりに出力します。これは簡単に編集できる形式になっており、将来の参照と再現性のために保存できます。

読み込んでいます...

保存した構成は、次のように簡単に実行できます。

読み込んでいます...

詳細情報

EDW 移行用データ検証ツールの紹介

MySQL から HarbourBridge 経由で Cloud Spanner へ

HarbourBridge のスキーマ アシスタントによる Cloud Spanner 移行の高速化

MySQL から Cloud Spanner に移行する

Striim を使用して Cloud Spanner に継続的なデータ レプリケーションを行う

HarbourBridge とデータ検証ツールは積極的に開発が続けられています。ぜひお試しいただき、フィードバックや問題の報告、修正や機能を強化するための PR の送付などのご協力をお願いいたします。これらのオープンソース ツールは、ユーザー コミュニティの一部であり、Google Cloud が公式にサポートするものではありません。

-データベース移行エンジニア Shashank Agarwal

-クラウド データベース移行エンジニア David Ng
投稿先