MySQL データ転送の概要

MySQL から BigQuery にデータを読み込むには、MySQL 向け BigQuery Data Transfer Service コネクタを使用します。このコネクタは、オンプレミス環境、Cloud SQL、および Amazon Web Services(AWS)や Microsoft Azure などの他のパブリック クラウド プロバイダでホストされている MySQL インスタンスをサポートしています。このドキュメントでは、MySQL 転送のデータの取り込みオプションの概要と、データ型のマッピングと料金について説明します。

MySQL 転送をスケジュールする方法については、MySQL データを BigQuery に読み込むをご覧ください。

データの取り込みオプション

以降のセクションでは、MySQL データ転送を設定する際のデータ取り込みオプションについて説明します。

TLS 構成

MySQL コネクタは、BigQuery へのデータ転送を暗号化するためのトランスポート レベル セキュリティ(TLS)の構成をサポートしています。MySQL コネクタは、次の TLS 構成をサポートしています。

  • データを暗号化し、CA とホスト名を検証するモード。このモードでは、TCPS プロトコルを介した TLS を使用してサーバーの完全な検証を行います。すべての転送中のデータを暗号化し、データベース サーバーの証明書が信頼できる認証局(CA)によって署名されていることを確認します。このモードでは、接続先のホスト名がサーバーの証明書の共通名(CN)またはサブジェクト代替名(SAN)と完全に一致することも確認します。このモードでは、攻撃者が別のドメインの有効な証明書を使用してデータベース サーバーを偽装することを防止できます。

    ホスト名が証明書の CN または SAN と一致しない場合、接続は失敗します。証明書と一致するように DNS の解決を構成するか、別のセキュリティ モードを使用する必要があります。このモードは、中間者(PITM)攻撃を防ぐための最も安全なオプションです。

  • データを暗号化し、CA のみを検証するモード。このモードでは、TCPS プロトコルを介した TLS を使用してすべてのデータを暗号化し、クライアントが信頼する CA によってサーバーの証明書が署名されていることを検証します。ただし、このモードではサーバーのホスト名は検証されません。このモードでは、証明書が有効で、信頼できる CA によって発行されていれば、証明書のホスト名が接続先のホスト名と一致するかどうかに関係なく、接続が成功します。

    このモードは、証明書が信頼できる CA によって署名されているサーバーに接続していることを確認したいものの、ホスト名が検証できない場合や、ホスト名構成を制御できない場合に使用します。

  • 暗号化のみモード。このモードでは、クライアントとサーバー間で転送されるすべてのデータが暗号化されます。証明書やホスト名の検証は行いません。

    このモードでは、転送中のデータを保護することで一定のセキュリティが確保されますが、PITM 攻撃に対して脆弱になる可能性があります。

    すべてのデータを暗号化する必要があるものの、サーバーの ID を検証できない場合や検証したくない場合は、このモードを使用します。プライベート VPC を使用する場合は、このモードを使用することをおすすめします。

  • 暗号化や検証を行わないモード。このモードでは、データは暗号化されず、証明書やホスト名の検証も行われません。すべてのデータは書式なしテキストとして送信されます。

    機密データが処理される環境では、このモードを使用しないことをおすすめします。このモードは、セキュリティが問題にならない分離されたネットワークでのテスト目的でのみ使用することをおすすめします。

信頼できるサーバー証明書(PEM)

データを暗号化して、CA とホスト名を検証するモードまたはデータを暗号化し、CA を検証するモードを使用している場合は、1 つ以上の PEM エンコード証明書を指定することもできます。これらの証明書は、BigQuery Data Transfer Service が TLS 接続中にデータベース サーバーの ID を確認する必要があるシナリオで必要になります。

  • 組織内のプライベート CA によって署名された証明書または自己署名証明書を使用している場合は、完全な証明書チェーンまたは単一の自己署名証明書を指定する必要があります。これは、Amazon Relational Database Service(RDS)などのマネージド クラウド プロバイダ サービスの内部 CA によって発行された証明書に必要です。
  • データベース サーバーの証明書がパブリック CA(Let's Encrypt、DigiCert、GlobalSign など)によって署名されている場合は、証明書を指定する必要はありません。これらのパブリック CA のルート証明書は、BigQuery Data Transfer Service によってプリインストールされ、信頼されています。

転送構成の [信頼できる PEM 証明書] フィールドに、次の要件を満たす PEM エンコード証明書を指定できます。

  • 証明書は、有効な PEM エンコード証明書チェーンである必要があります。
  • 証明書は完全に正しいものである必要があります。チェーン内の証明書が欠落している場合や、内容が正しくない場合、TLS 接続は失敗します。
  • 単一の証明書の場合は、データベース サーバーから単一の自己署名証明書を指定できます。
  • プライベート CA が発行した完全な証明書チェーンの場合は、完全な信頼チェーンを指定する必要があります。これには、データベース サーバーの証明書と、中間およびルート CA 証明書が含まれます。

完全転送または増分転送

MySQL 転送を設定するときに、転送構成で [完全] または [増分] の書き込み設定を選択することで、BigQuery へのデータの読み込み方法を指定できます。増分転送はプレビュー版でサポートされています。

完全データ転送を構成すると、データ転送のたびに MySQL データセットからすべてのデータが転送されます。

または、増分データ転送(プレビュー版)を構成して、データ転送ごとにデータセット全体を読み込むのではなく、最後のデータ転送以降に変更されたデータのみを転送することもできます。データ転送で [増分] を選択した場合は、[追加] または [Upsert] の書き込みモードを指定して、データの増分転送中に BigQuery にデータを書き込む方法を定義する必要があります。以降のセクションでは、使用可能な書き込みモードについて説明します。

[追加] 書き込みモード

追加書き込みモードでは、宛先テーブルに新しい行のみが挿入されます。このオプションでは、既存のレコードをチェックせずに転送されたデータが厳密に追加されるため、このモードでは宛先テーブルでデータが重複する可能性があります。

追加モードを選択した場合は、ウォーターマーク列を選択する必要があります。MySQL コネクタがソーステーブルの変更を追跡するには、ウォーターマーク列が必要です。

MySQL の転送では、レコードの作成時にのみ更新され、その後の更新では変更されない列(CREATED_AT 列など)を選択することをおすすめします。

[Upsert] 書き込みモード

upsert 書き込みモードでは、主キーを確認して、宛先テーブルの行を更新するか、新しい行を挿入します。主キーを指定すると、MySQL コネクタは、宛先テーブルをソーステーブルと最新の状態に保つために必要な変更を特定できます。データ移転中に指定された主キーが宛先 BigQuery テーブルに存在している場合、MySQL コネクタはソーステーブルの新しいデータでその行を更新します。データ転送中に主キーが存在していない場合、MySQL コネクタは新しい行を挿入します。

Upsert モードを選択する場合は、ウォーターマーク列と主キーを選択する必要があります。

  • MySQL コネクタがソーステーブルの変更を追跡するには、ウォーターマーク列が必要です。
    • 行が変更されるたびに更新されるウォーターマーク列を選択します。UPDATED_AT 列または LAST_MODIFIED 列に類似した列を使用することをおすすめします。
  • 主キーは、行の挿入または更新が必要かどうかを MySQL コネクタが判断するために必要なテーブルの 1 つ以上の列です。

    テーブルのすべての行で一意の null 以外の値を含む列を選択します。システムが生成した識別子、一意の参照コード(自動増分式の ID など)、不変の時間ベースのシーケンス ID を含む列をおすすめします。

    データの損失や破損を防ぐため、選択する主キー列には一意の値が必要です。選択した主キー列の一意性に疑問がある場合は、代わりに [追加] 書き込みモードを使用することをおすすめします。

増分取り込みの動作

データソースのテーブル スキーマを変更すると、それらのテーブルからの増分データ転送が次の方法で BigQuery に反映されます。

データソースの変更 増分取り込みの動作
新しい列を追加する 宛先の BigQuery テーブルに新しい列が追加されます。この列の以前のレコードはすべて null 値になります。
列の削除 削除された列は、宛先の BigQuery テーブルに残ります。この削除された列の新しいエントリには null 値が入力されます。
列のデータ型を変更する このコネクタは、 ALTER COLUMN DDL ステートメントでサポートされているデータ型の変換のみをサポートします。他のデータ型変換を行うと、データ転送が失敗します。

問題が発生した場合は、新しい転送構成を作成することをおすすめします。

列の名前を変更する 元の列は宛先 BigQuery テーブルにそのまま残り、更新された名前の新しい列が宛先テーブルに追加されます。

データ型マッピング

次の表に、MySQL データ型と対応する BigQuery データ型のマッピングを示します。

MySQL のデータ型 BigQuery のデータ型 更新された BigQuery のデータ型
BIT BOOLEAN
TINYINT INTEGER
BOOL、BOOLEAN INTEGER

MySQL データベースでは、BOOL データ型と BOOLEAN データ型は内部的に TINYINT(1) として保存され、-128~127 の範囲の値がサポートされます。このため、BigQuery に転送されると、BOOL データ型と BOOLEAN データ型は INTEGER にマッピングされます。詳細については、数値データ型の構文をご覧ください。

SMALLINT INTEGER
MEDIUMINT INTEGER
INT、INTEGER INTEGER
BIGINT BIGNUMERIC
FLOAT FLOAT
DOUBLE FLOAT
DECIMAL BIGNUMERIC
DATE DATE
DATETIME TIMESTAMP DATETIME
TIMESTAMP TIMESTAMP
TIME TIME
YEAR DATE
CHAR STRING
VARCHAR STRING
BINARY BYTES
VARBINARY BYTES
TINYBLOB BYTES
TINYTEXT STRING
BLOB BYTES
TEXT STRING
MEDIUMBLOB BYTES
MEDIUMTEXT STRING
LONGBLOB BYTES
LONGTEXT STRING
ENUM STRING
SET STRING
JSON STRING JSON
GEOMETRY BYTES GEOGRAPHY

料金

MySQL 転送の料金については、Data Transfer Service の料金をご覧ください。

次のステップ