MySQL Reader を使用すると、バイナリログをサブスクライブすることで、MySQL データベースのテーブルからリアルタイムでデータを読み取ることができます。このトピックでは、MySQL Reader の設定方法と、必要なネットワーク環境および権限について詳しく説明します。
前提条件
MySQL Reader を設定する前に、次の前提条件が満たされていることを確認してください。
同期アカウントの権限が設定されていること。 詳細については、「アカウント権限の設定」をご参照ください。
MySQL データソースのリアルタイム同期ノードは、DataWorks で MySQL データソース用に設定したアカウントを使用してデータベースにアクセスします。 このアカウントには、データベースに対する次の権限が付与されている必要があります:
SELECT、REPLICATION SLAVE、およびREPLICATION CLIENT。MySQL インスタンスのバイナリロギング機能が有効になっていること。 詳細については、「MySQL のバイナリロギングを有効にする」をご参照ください。
Data Integration は、MySQL バイナリログをサブスクライブすることで、MySQL からの増分データをリアルタイムで同期します。 したがって、DataWorks で同期タスクを設定する前に、MySQL のバイナリロギング機能を有効にする必要があります。
ビジネス要件を満たす Data Integration 専用リソースグループを購入済みであること。 詳細については、「Data Integration 専用リソースグループの作成と使用」をご参照ください。
データ同期用のリソースグループとデータベース間のネットワーク接続が確立されていること。 詳細については、「ネットワーク接続ソリューション」をご参照ください。
制限事項
Data Integration は、MySQL データベースの読み取り専用インスタンスからのデータ同期をサポートしていません。
MySQL からのリアルタイムデータ同期は、MySQL
5.xまたは8.xを実行する RDS for MySQL インスタンスでのみサポートされています。 DRDS データベースからデータを同期する場合は、MySQL データソースとして設定しないでください。 代わりに、DRDS データソースを DataWorks に追加します。 詳細については、「DRDS データソースの設定」をご参照ください。関数インデックスはサポートされていません。
MySQL Reader の設定
DataStudio ページに移動します。
DataWorks コンソールにログインします。 上部のナビゲーションバーで、目的のリージョンを選択します。 左側のナビゲーションウィンドウで、 を選択します。 表示されたページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発へ] をクリックします。
DataStudio ページの [Scheduled Workflow] ペインで、ポインターを
アイコンに移動し、 を選択します。または、[Scheduled Workflow] ペインで目的のワークフローを見つけ、ワークフロー名を右クリックして、 を選択します。
[ノードの作成] ダイアログボックスで、[同期方法] パラメーターを [End-to-end ETL] に設定し、[名前] と [パス] パラメーターを設定します。
[確認] をクリックします。
リアルタイム同期ノードの設定タブで、 をキャンバスにドラッグします。
[MySQL] ノードをクリックします。 表示される [ノード設定] パネルで、パラメーターを設定します。

パラメーター
説明
データソース
設定済みの MySQL データソースを選択します。 MySQL データソースのみがサポートされています。
利用可能なデータソースがない場合は、右側の [新規データソース] をクリックして ページに移動し、データソースを作成します。
テーブル
現在のデータソースでデータを同期するテーブルの名前を選択します。 右側の [データプレビュー] をクリックして選択内容を確認できます。
シャーディングされたデータベースとテーブルからデータを同期できます。 設定されたデータベースとテーブルは、タスク内でリアルタイムに同期されます。
重要実行エラーを防ぐために、シャーディングされたデータベース内のテーブルが同じスキーマを使用していることを確認してください。 スキーマには、フィールド数、フィールドタイプ、フィールド名、フィールドの順序が含まれます。
出力フィールド
同期するフィールドを選択します。 フィールドには、[管理フィールド] と [データフィールド] が含まれます。
管理フィールド: データの管理、ソート、重複排除を容易にするために、宛先に自動的に追加される追加フィールド。
データフィールド: 同期するソーステーブルのフィールド。
詳細については、「リアルタイム同期に使用されるフィールド」をご参照ください。
MySQL ノードはシャーディングをサポートしています。 [シャーディングされたデータベースとテーブルを追加] をクリックし、ドロップダウンリストから目的の [データソース] と [テーブル] を選択して、同時同期のために複数のデータソースを追加できます。
ツールバーの
アイコンをクリックします。
よくある質問
MySQL データソースのリアルタイム同期タスクが、最初にデータを読み取った後に停止します。どうすればよいですか?
データベースで次のコマンドを実行して、データベースインスタンスが現在データを書き込んでいるバイナリログファイルを表示します。
show master statusタスクログで
journalName=MySQL-bin.000001,position=50のようなログエントリを検索します。 ログ内のバイナリログファイルとデータベースの現在のバイナリログファイルを比較して、データがまだ書き込まれているかどうかを確認します。データがデータベースに書き込まれているにもかかわらず、タスクログのバイナリログの位置が進まない場合は、データベース管理者 (DBA) に連絡して支援を求めてください。
MySQL のリアルタイム同期タスクで
Cannot replicate because the master purged required binary logs.エラーが報告された場合はどうすればよいですか?回答: 完全なエラーメッセージは「
Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere, or provision a new slave from backup.」です。このエラーは、コンシューマオフセットのバイナリログレコードが MySQL で見つからないために発生します。 MySQL データベースのバイナリログ保持期間を確認してください。 同期タスクを開始するときは、指定されたオフセットが保持期間内にあることを確認してください。 バイナリログをサブスクライブできない場合は、オフセットを現在の時刻にリセットしてみてください。
MySQL のリアルタイム同期タスクで
MySQLBinlogReaderExceptionエラーが報告された場合はどうすればよいですか?回答: 完全なエラーメッセージは「
MySQLBinlogReaderException: The database you are currently syncing is the standby database, but the current value of log_slave_updates is OFF, you need to enable the binlog log update of the standby database first.」です。このエラーは、セカンダリデータベースでバイナリロギングが有効になっていないために発生します。 セカンダリデータベースからデータを同期する場合は、カスケードバイナリロギングを有効にする必要があります。 DBA に連絡して支援を求めてください。バイナリロギングを有効にする方法の詳細については、「MySQL のバイナリロギングを有効にする」をご参照ください。
MySQL のリアルタイム同期タスクで
show master status' has an error!エラーが報告された場合はどうすればよいですか?回答: 完全なエラーメッセージは「
show master status' has an error!」で、詳細なエラー情報は「Caused by: java.io.IOException: message=Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation, with command: show master status」です。このエラーは、データソースアカウントにデータベースに対する必要な権限が付与されていないために発生します。データソースの設定に使用するアカウントには、SELECT、REPLICATION SLAVE、および REPLICATION CLIENT 権限が必要です。 データソースアカウントに権限を付与する方法の詳細については、「ステップ 2: アカウントを作成し、アカウントに権限を付与する」をご参照ください。
MySQL のリアルタイム同期タスクで
parse.exception.PositionNotFoundException: can't find start position for xxエラーが報告された場合はどうすればよいですか?回答: このエラーは、同期タスクが指定されたオフセットを見つけられないことを示します。 オフセットをリセットする必要があります。
MySQL のリアルタイム同期タスクで次のエラーが報告された場合はどうすればよいですか:
データベースオフセットの有効期限が切れました。別のオフセットを選択してください。ソースデータベースの最も古い利用可能なオフセットは xxx です。オフセットのリセット: リアルタイム同期タスクを開始するときに、オフセットをソースデータベースの利用可能な最も古いオフセットにリセットします。
バイナリログの保持期間の調整: データベースのオフセットが頻繁に期限切れになる場合は、MySQL データベースのバイナリログの保持期間を長くすることができます。 たとえば、保持期間を 7 日間に設定できます。
データの同期: データが失われた場合は、完全データ同期を再度実行するか、オフライン同期タスクを設定して失われたデータを手動で同期します。
リアルタイム同期は、単一のデータベース内の複数のテーブルから異なるフィールドをマージすることをサポートしていますか? たとえば、テーブル A にフィールド a と b が含まれ、テーブル B にフィールド a と c が含まれる場合、データをフィールド a、b、c を含むテーブルに同期できますか?
いいえ、サポートしていません。 リアルタイム同期は、まったく同じスキーマを持つ複数のテーブルに対してのみサポートされます。