DataWorks は、MySQL データソースからデータを読み取ったり、MySQL データソースにデータを書き込んだりする際に使用できる MySQL Reader と MySQL Writer を提供しています。このトピックでは、MySQL データソースとのデータ同期機能について説明します。
サポートされている MySQL のバージョン
バッチデータの読み取りと書き込み:
MySQL 5.5.X、MySQL 5.6.X、MySQL 5.7.X、および MySQL 8.0.X。Amazon RDS for MySQL、Azure MySQL、およびAmazon Aurora MySQL データソースと互換性があります。
バッチ同期の際にビューのデータを読み取ることができます。
リアルタイムデータの読み取り:
MySQL からのデータのリアルタイム同期は、MySQL バイナリログへのリアルタイム サブスクリプションに基づいて実行され、MySQL 5.5.X、MySQL 5.6.X、MySQL 5.7.X、および MySQL 8.0.X でのみサポートされています。リアルタイム同期機能は、関数インデックスなど、MySQL 8.0.X の新機能とは互換性がありません。Amazon RDS for MySQL、Azure MySQL、およびAmazon Aurora MySQL データソースと互換性があります。
重要MySQL を実行する DRDS データソースを MySQL データソースとして構成することはできません。MySQL を実行する DRDS データソースからデータをリアルタイムで同期する場合は、「DRDS データソースを追加する」のトピックを参照して、DRDS データソースを追加し、そのデータソースのリアルタイム同期タスクを構成できます。
制限事項
リアルタイムデータの読み取り
Data Integration は、MySQL Reader を使用した読み取り専用 MySQL インスタンスからのデータのリアルタイム同期をサポートしていません。
Data Integration は、関数インデックスを含むテーブルからのデータのリアルタイム同期をサポートしていません。
Data Integration は、XA ROLLBACK 文が実行されたデータのリアルタイム同期をサポートしていません。
XA PREPARE 文が実行されたトランザクションデータについては、リアルタイム同期機能を使用して、データを宛先に同期できます。後で XA ROLLBACK 文がデータに対して実行された場合、データへのロールバックの変更は宛先に同期されません。同期するテーブルに XA ROLLBACK 文が実行されたテーブルが含まれている場合は、XA ROLLBACK 文が実行されたテーブルをリアルタイム同期タスクから削除し、削除したテーブルを再度追加してデータを同期する必要があります。
MySQL からのデータのリアルタイム同期は、行形式のバイナリログのみをサポートしています。
Data Integration は、カスケード削除操作が実行された関連テーブルのデータレコードのリアルタイム同期をサポートしていません。
Amazon Aurora MySQL データベースからデータを読み取る場合は、データ書き込みのために Amazon Aurora MySQL データベースをプライマリデータベースに接続する必要があります。これは、AWS では Amazon Aurora MySQL の読み取り専用レプリカでバイナリロギング機能を有効にすることができないためです。バイナリロギング機能は、リアルタイム同期タスクが増分データを同期するために必要です。
MySQL テーブルに対するすべてのオンライン DDL 操作のうち、Data Management (DMS) を使用して実行される列の追加操作のみがリアルタイムで同期できます。
MySQL からストアドプロシージャを読み取ることはできません。
バッチデータの読み取り
シャーディングなどのマルチテーブル同期シナリオで MySQL Reader を使用して MySQL からデータを同期する場合、テーブルを分割するには、指定した並列スレッド数がテーブル数よりも大きい必要があります。指定した並列スレッド数がテーブル数以下の場合、テーブルは分割されず、実際に使用される並列スレッド数は同期されるテーブル数と同じになります。
MySQL からストアドプロシージャを読み取ることはできません。
サポートされているデータ型
各 MySQL バージョンのすべてのデータ型については、MySQL 公式ドキュメントを参照してください。次の表は、MySQL 8.0.X の主なデータ型のサポート状況を示しています。
データ型 | バッチデータ読み取り用 MySQL Reader | バッチデータ書き込み用 MySQL Writer | リアルタイムデータ読み取り用 MySQL Reader | リアルタイムデータ書き込み用 MySQL Writer |
TINYINT | ||||
SMALLINT | ||||
INTEGER | ||||
BIGINT | ||||
FLOAT | ||||
DOUBLE | ||||
DECIMAL/NUMBERIC | ||||
REAL | ||||
VARCHAR | ||||
JSON | ||||
TEXT | ||||
MEDIUMTEXT | ||||
LONGTEXT | ||||
VARBINARY | ||||
BINARY | ||||
TINYBLOB | ||||
MEDIUMBLOB | ||||
LONGBLOB | ||||
ENUM | ||||
SET | ||||
BOOLEAN | ||||
BIT | ||||
DATE | ||||
DATETIME | ||||
TIMESTAMP | ||||
TIME | ||||
YEAR | ||||
LINESTRING | ||||
POLYGON | ||||
MULTIPOINT | ||||
MULTILINESTRING | ||||
MULTIPOLYGON | ||||
GEOMETRYCOLLECTION |
データ同期の前に MySQL 環境を準備する
DataWorks を使用して MySQL データソースとの間でデータを同期する前に、MySQL 環境を準備する必要があります。これにより、データ同期タスクを構成し、MySQL データソースとの間で想定どおりにデータを同期できるようになります。MySQL データソースとの間でデータを同期するための MySQL 環境を準備する方法は次のとおりです。
MySQL データベースのバージョンを確認する
Data Integration には、MySQL のバージョンに関する特定の要件があります。サポートされている MySQL のバージョンを参照して、MySQL データベースのバージョンが要件を満たしているかどうかを確認できます。次の文を実行して、MySQL データベースのバージョンを確認できます。
SELECT version();
必要な権限を持つアカウントを準備する
DataWorks が MySQL データベースにアクセスするためのアカウントを計画して作成することをお勧めします。このようなアカウントを準備するには、次の手順を実行します。
オプション。 アカウントを作成します。
詳細については、「MySQL データベースにアクセスするためのアカウントを作成する」をご参照ください。
アカウントに必要な権限を付与します。
バッチ同期
バッチデータの読み取りとバッチデータの書き込みには、異なる権限が必要です。
バッチデータの読み取り: アカウントには
SELECT
権限が必要です。バッチデータの書き込み: アカウントには
INSERT
、DELETE
、およびUPDATE
権限が必要です。
リアルタイム同期
アカウントには、MySQL データベースに対する
SELECT
、REPLICATION SLAVE
、およびREPLICATION CLIENT
権限が必要です。
次の文を実行して、アカウントに権限を付与できます。または、アカウントに
SUPER
権限を付与することもできます。文中のAccount for data synchronization
を、作成したアカウントに置き換えます。-- CREATE USER 'Account for data synchronization'@'%' IDENTIFIED BY 'Password'; //データ同期に使用できるアカウントを作成し、パスワードを指定します。このようにして、任意のホストからアカウントとパスワードを使用してデータベースにアクセスできます。 % はホストを示します。 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'Account for data synchronization'@'%'; // アカウントに SELECT、REPLICATION SLAVE、および REPLICATION CLIENT 権限を付与します。
*.*
は、すべてのデータベースのすべてのテーブルに対する上記の権限がアカウントに付与されていることを示します。データベース内の特定のテーブルに対する上記の権限をアカウントに付与することもできます。たとえば、test データベースの user テーブルに対する上記の権限をアカウントに付与するには、次の文を実行します:GRANT SELECT, REPLICATION CLIENT ON test.user TO 'Account for data synchronization'@'%';
。説明REPLICATION SLAVE
権限はグローバル権限です。データベース内の特定のテーブルに対するこの権限をアカウントに付与することはできません。
リアルタイム同期のシナリオでのみバイナリロギング機能を有効にする
MySQL からの増分データのリアルタイム同期は、MySQL バイナリログのリアルタイム サブスクリプションに基づいて実行されます。MySQL から増分データを同期するためにリアルタイム同期タスクを構成する前に、バイナリロギング機能を有効にする必要があります。バイナリロギング機能を有効にするには、次の手順を実行します。
リアルタイム同期タスクが MySQL データソースのバイナリログからデータを同期している場合、関連データベースからバイナリログを削除することはできません。MySQL データソースのリアルタイム同期タスクでレイテンシが発生した場合、タスクがバイナリログからデータを読み取るのに長時間かかる場合があります。タスクに適切なアラートルールを構成して、タスクでレイテンシが発生したときにシステムがアラート通知を送信できるようにする必要があります。さらに、関連データベースのディスク容量にも注意を払う必要があります。
バイナリログは少なくとも 72 時間保持する必要があります。バイナリログの保持期間が短い場合、失敗した同期タスクを再実行する前にバイナリログがクリアされる可能性があります。この場合、同期タスクが失敗する前の位置にバイナリログのオフセットをリセットすることはできません。これにより、データが失われます。データが失われた場合は、完全データのバッチ同期のみを実行して、不足しているデータを補足できます。
バイナリロギング機能が有効になっているかどうかを確認します。
次の文を実行して、バイナリロギング機能が有効になっているかどうかを確認します。
SHOW variables LIKE "log_bin";
返された結果に ON が表示されている場合、バイナリロギング機能は有効になっています。
セカンダリ MySQL データベースから増分データを同期する場合、次の文を実行して、セカンダリ MySQL データベースでバイナリロギング機能が有効になっているかどうかを確認します。
SHOW variables LIKE "log_slave_updates";
返された結果に ON が表示されている場合、セカンダリ MySQL データベースでバイナリロギング機能は有効になっています。
返された結果に ON が表示されていない場合:
オープンソース MySQL: MySQL 公式ドキュメントに記載されている手順に従って、バイナリロギング機能を有効にします。
ApsaraDB RDS for MySQL: ApsaraDB RDS for MySQL インスタンスのログバックアップ機能を使用するに記載されている手順に従って、バイナリロギング機能を有効にします。
PolarDB for MySQL: バイナリロギングを有効にするに記載されている手順に従って、バイナリロギング機能を有効にします。
バイナリログのフォーマットをクエリします。
次の文を実行して、バイナリログのフォーマットをクエリします。
SHOW variables LIKE "binlog_format";
システムは次のいずれかの結果を返す場合があります。
ROW: バイナリログのフォーマットは row です。
STATEMENT: バイナリログのフォーマットは statement です。
MIXED: バイナリログのフォーマットは mixed です。
重要MySQL からのデータのリアルタイム同期では、row フォーマットのバイナリログのみがサポートされています。バイナリログのフォーマットが row でない場合は、フォーマットを row に変更します。
binlog_row_image パラメータの設定をクエリします。
次の文を実行して、binlog_row_image パラメータの設定をクエリします。
SHOW variables LIKE "binlog_row_image";
システムは次のいずれかの結果を返す場合があります。
FULL: before イメージと after イメージの両方のすべての列をログに記録します。
MINIMAL: before イメージまたは after イメージの特定の列のみをログに記録します。
重要注: MySQL からのデータのリアルタイム同期は、binlog_row_image パラメーターに指定された FULL 値のみをサポートします。 binlog_row_image パラメーターの値が FULL でない場合は、値をFULLに変更します。
OSS からのバイナリログの読み取りの承認
MySQL データソースを追加するときに、[構成モード] パラメータを [Alibaba Cloud インスタンスモード] に設定し、リージョンパラメータを現在の DataWorks ワークスペースが存在するリージョンに設定した場合、[OSS からのバイナリログの読み取りを有効にする] をオンにすることができます。このスイッチをオンにすると、DataWorks は ApsaraDB RDS for MySQL からバイナリログを読み取れない場合に Object Storage Service (OSS) からバイナリログを取得しようとします。これにより、リアルタイム同期タスクが中断されるのを防ぎます。
[OSS からバイナリログにアクセスするための ID] パラメータを [Alibaba Cloud RAM ユーザー] または [Alibaba Cloud RAM ロール] に設定した場合は、RAM ユーザーまたは RAM ロールに権限を付与するために、次の操作も実行する必要があります。
Alibaba Cloud RAM ユーザー
RAM コンソールの [ユーザー] ページに移動します。権限を付与する RAM ユーザーを見つけます。
[アクション] 列の [権限の追加] をクリックします。
[権限の付与] パネルでパラメータを構成し、[権限の付与] をクリックします。主なパラメータ:
[リソーススコープ]: アカウントを選択します。
[ポリシー]: ドロップダウンリストから [システムポリシー] を選択します。
検索ボックスに
AliyunDataWorksAccessingRdsOSSBinlogPolicy
と入力してポリシーを見つけ、[選択済みポリシー] 領域にポリシーを追加します。
Alibaba Cloud RAM ロール
RAM コンソールの [ロール] ページに移動します。[ロール] ページで RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud アカウントの RAM ロールを作成する」をご参照ください。
主なパラメータ:
[プリンシパルタイプ]: このパラメータを [クラウドアカウント] に設定します。
[プリンシパル名]: このパラメータを [その他のアカウント] に設定し、表示されるフィールドに DataWorks ワークスペースが属する Alibaba Cloud アカウントの ID を入力します。
[ロール名]: カスタムロール名を指定します。
作成した RAM ロールに権限を付与します。詳細については、「RAM ロールに権限を付与する」をご参照ください。
主なパラメータ:
[ポリシー]: ドロップダウンリストから [システムポリシー] を選択します。
AliyunDataWorksAccessingRdsOSSBinlogPolicy
ポリシーを RAM ロールにアタッチします。
作成した RAM ロールの信頼ポリシーを変更します。詳細については、「RAM ロールの信頼ポリシーを編集する」をご参照ください。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "<DataWorks ユーザーの Alibaba Cloud アカウントの ID>@cdp.aliyuncs.com", "<DataWorks ユーザーの Alibaba Cloud アカウントの ID>@dataworks.aliyuncs.com" ] } } ], "Version": "1" }
データソースを追加する
DataWorks で同期タスクを開発する前に、データソースを追加および管理するの手順に従って、必要なデータソースを DataWorks に追加する必要があります。 DataWorks コンソールでパラメーターのヒントを表示して、データソースを追加するときのパラメーターの意味を理解できます。
ネットワーク環境設定に基づいて接続モードを選択します。
シナリオ 1:VPC 経由の接続(推奨)
仮想プライベートクラウド(VPC)は、低レイテンシとより安全なデータ伝送を特長としています。インターネットアクセスのための追加構成は必要ありません。
シナリオ:MySQL インスタンスは、使用するサーバーレス リソースグループと同じ VPC にデプロイされています。
サポートされているモード:
[Alibaba Cloud インスタンスモード]:使用するリソースグループと同じ VPC にデプロイされている MySQL インスタンスを選択します。システムは自動的に接続情報を取得します。手動構成は必要ありません。
[接続文字列モード]:インスタンスの内部エンドポイントとポート番号を手動で指定します。
シナリオ 2:インターネット経由の接続
インターネット経由のデータ伝送にはリスクがあります。インターネット経由で接続を確立する場合は、ホワイトリストや IP アドレスベースの認証などのセキュリティポリシーを構成することをお勧めします。
シナリオ:インターネット経由で MySQL インスタンスにアクセスします。たとえば、リージョン間またはオンプレミス環境の MySQL インスタンスにアクセスします。
サポートされているモード:
[接続文字列モード]:インスタンスのパブリックエンドポイントとポート番号を手動で指定します。MySQL インスタンスでインターネットアクセスが有効になっていることを確認してください。
デフォルトでは、サーバーレス リソースグループはインターネットにアクセスできません。サーバーレス リソースグループを使用してインターネット経由で MySQL インスタンスにアクセスする場合は、リソースグループが関連付けられている VPC にNAT ゲートウェイを構成する必要があります。これにより、リソースグループは NAT ゲートウェイに関連付けられた Elastic IP アドレス(EIP)を使用して、インターネット経由で MySQL インスタンスにアクセスできます。
データ同期タスクを開発する
同期タスクの開始点と構成手順については、以下の構成ガイドを参照してください。
単一テーブルのデータを同期するためのバッチ同期タスクを構成する
構成手順の詳細については、「コードレス UI を使用してバッチ同期タスクを構成する」および「コードエディタを使用してバッチ同期タスクを構成する」をご参照ください。
コードエディタを使用してバッチ同期タスクを構成する際に構成されるすべてのパラメーターと実行されるコードについては、「付録: コードとパラメーター」をご参照ください。
単一テーブルのデータを同期するためのリアルタイム同期タスクを構成する
構成手順の詳細については、「DataStudio でリアルタイム同期タスクを構成する」をご参照ください。
データベース内のすべてのデータのバッチ同期、データベース内の完全データまたは増分データのリアルタイム同期、およびシャーディングデータベース内のシャーディングテーブルからのデータのリアルタイム同期を実装するための同期設定を構成する
構成手順の詳細については、「Data Integration で同期タスクを構成する」をご参照ください。
よくある質問
詳細については、「Data Integration に関するよくある質問」をご参照ください。
接続パラメータ
コードエディタを使用してバッチ同期タスクを設定する
コードエディタを使用してバッチ同期タスクを設定する場合、統一スクリプト形式の要件に基づいて、スクリプトに関連パラメーターを設定する必要があります。詳細については、「コードエディタを使用してバッチ同期タスクを設定する」をご参照ください。次の情報は、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要のあるパラメーターについて説明しています。