適用対象:
Azure Data Factory
Azure Synapse Analytics
Tip
Microsoft Fabric の Data Factory (企業向けのオールインワン分析ソリューション) を試してみてください。 Microsoft Fabric では、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法については、こちらを参照してください。
この記事では、Azure Data Factory および Synapse Analytics パイプラインでコピー アクティビティを使用して、MySQL データベースからデータをコピーする方法について説明します。 この記事は、コピー アクティビティの概要を示しているコピー アクティビティの概要に関する記事に基づいています。
Note
Azure Database for MySQL サービスとの間でデータをコピーするには、専用の Azure Database for MySQL コネクタを使用します。
Important
MySQL コネクタ バージョン 1.0 は 削除段階にあります。 MySQL コネクタをバージョン 1.0 から 2.0 にアップグレードすることをお勧めします。
サポートされる機能
この MySQL コネクタでは、次の機能がサポートされます。
| サポートされる機能 | IR |
|---|---|
| Copy アクティビティ (ソース/-) | ① ② |
| Lookup アクティビティ | ① ② |
① Azure 統合ランタイム ② セルフホステッド統合ランタイム
コピー アクティビティによってソースまたはシンクとしてサポートされているデータ ストアの一覧については、サポートされているデータ ストアに関する記事の表をご覧ください。
このコネクタは、MySQL コネクタ バージョン 2.0 では MySQL バージョン 5.5、5.6、5.7、8.0、8.1 および 8.2 を、バージョン 1.0 では MySQL バージョン 5.6、5.7 および 8.0 をサポートしています。
Prerequisites
データ ストアがオンプレ ミスネットワーク、Azure 仮想ネットワーク、または Amazon Virtual Private Cloud 内にある場合は、それに接続するようセルフホステッド統合ランタイムを構成する必要があります。
データ ストアがマネージド クラウド データ サービスである場合は、Azure Integration Runtime を使用できます。 ファイアウォール規則で承認されている IP にアクセスが制限されている場合は、Azure Integration Runtime の IP を許可リストに追加できます。
また、Azure Data Factory のマネージド仮想ネットワーク統合ランタイム機能を使用すれば、セルフホステッド統合ランタイムをインストールして構成しなくても、オンプレミス ネットワークにアクセスすることができます。
Data Factory によってサポートされるネットワーク セキュリティ メカニズムやオプションの詳細については、「データ アクセス戦略」を参照してください。
Integration Runtime のバージョン 3.7 以降には MySQL ドライバーが組み込まれているため、ドライバーを手動でインストールする必要はありません。
作業の開始
パイプラインでコピー アクティビティを実行するには、次のいずれかのツールまたは SDK を使用できます。
- データのコピー ツール
- Azure Portal
- .NET SDK
- Python SDK
- Azure PowerShell
- REST API
- Azure Resource Manager テンプレート
UI を使用して MySQL のリンク サービスを作成する
次の手順を使用して、Azure portal UI で MySQL へのリンク サービスを作成します。
Azure Data Factory または Synapse ワークスペースの [管理] タブに移動し、[リンク サービス] を選択して、[新規] をクリックします。
- Azureデータファクトリー
- Azure Synapse
MySQL を検索し、MySQL コネクタを選択します。
サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。
コネクタの構成の詳細
次のセクションでは、MySQL コネクタに固有の Data Factory エンティティを定義するために使用されるプロパティについて詳しく説明します。
リンクされたサービスのプロパティ
バージョン 2.0 を使用する場合、MySQL のリンク サービスでは、次のプロパティがサポートされます:
| Property | Description | Required |
|---|---|---|
| 型 | type プロパティを MySql に設定する必要があります。 | Yes |
| driverVersion | バージョン 2.0 を選択したときのドライバーのバージョン。 値は v2 です。 | Yes |
| サーバー | MySQL サーバーの名前。 | Yes |
| ポート | MySQL サーバーに接続するためのポート番号。 | No |
| データベース | MySQL データベースの名前。 | Yes |
| ユーザー名 | ユーザー名。 | Yes |
| パスワード | 該当するユーザー名のパスワード。 安全に保存するには、このフィールドを SecureString としてマークします。 また、Azure Key Vault に格納されているシークレットを参照することもできます。 | Yes |
| sslMode | このオプションは、MySQL に接続するときにドライバーで TLS 暗号化および検証を使用するかどうかを指定します。 例: SSLMode=<0/1/2/3/4>。オプション: DISABLED (0) / PREFERRED (1) (既定値) / REQUIRED (2) / VERIFY_CA (3) / VERIFY_IDENTITY (4) |
Yes |
| useSystemTrustStore | このオプションは、システムの信頼ストアと指定した PEM ファイルのどちらの CA 証明書を使用するかを指定します。 例: UseSystemTrustStore=<0/1>オプション: Enabled (1) / Disabled (0) (既定値) |
No |
| connectVia | データ ストアに接続するために使用される統合ランタイム。 詳細については、「前提条件」セクションを参照してください。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 | No |
| 追加の接続プロパティ | ||
| allowZeroDateTime | このプロパティ値を true に指定すると、0000-00-00 の特殊な "ゼロ" 日付値をデータベースから取得できます。
false (既定値) に設定すると、日付列は DateTime 値として返されます。つまり、0000-00-00 を取得することはできません。 MySQL では、 0000-00-00 の "ゼロ" 値を "ダミー日付" として格納できます。 場合によっては、この機能の方が NULL 値の使用よりも便利で、使用するデータとインデックス領域が少なくなります。 MySQL で 0000-00-00 を禁止するには、NO_ZERO_DATE モードを有効にします。 詳細については、こちらの記事を参照してください。 |
No |
| connectionTimeout | サーバーへの接続が確立されるまでに待機する時間 (秒) です。この時間が経過すると接続要求を終了し、エラーを生成します。 | No |
| convertZeroDateTime | 禁止されている値を持つ date 列または datetime 列の DateTime.MinValue を返すには、true に設定します。 |
No |
| guidFormat | GUID として読み取る必要がある列の種類 (存在する場合) を決定します。 各列の種類の説明については、この記事に進んでこのプロパティを検索してください。 バージョン 2.0 では、パフォーマンスを向上させるために、Char(36) が既定で GUID 型として扱われます。 このコネクタは、Char(36) フィールドを GUID として扱うことで、データベースの処理を容易にします。 この取り扱いにより、GUID 値の挿入、更新、取得などの操作が簡略化され、これらの値が、アプリケーション コードでプレーン文字列ではなく GUID オブジェクトとして一貫して管理されるようになります。 この動作は、GUID が主キーまたは一意の識別子として使用されるシナリオで特に役に立ち、パフォーマンスが向上します。 この既定の設定が不要な場合は、接続プロパティで guidFormat=none を構成できます。 |
No |
| sslCert | PEM 形式のクライアントの SSL 証明書ファイルへのパス。 SslKey も指定する必要があります。 | No |
| sslKey | PEM 形式のクライアントの SSL 秘密キーへのパス。 SslCert も指定する必要があります。 | No |
| treatTinyAsBoolean | true に設定すると、tinyint(1) 値がブール値として返されます。 このプロパティを false に設定すると、tinyint(1) が SByte/Byte として返されます。 バージョン 2.0 では、tinyint(1) が既定でブール型として扱われます。 詳細については、こちらの記事を参照してください。 コネクタが tiny を numeric として返すようにするには、接続プロパティで treatTinyAsBoolean=false を設定します。 |
No |
Example:
{
"name": "MySQLLinkedService",
"properties": {
"type": "MySql",
"typeProperties": {
"server": "<server>",
"port": 3306,
"database": "<database>",
"username": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"sslmode": <sslmode>,
"usesystemtruststore": <UseSystemTrustStore>,
"driverVersion": "v2"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
例: パスワードを Azure Key Vault に格納する
{
"name": "MySQLLinkedService",
"properties": {
"type": "MySql",
"typeProperties": {
"server": "<server>",
"port": 3306,
"database": "<database>",
"username": "<username>",
"sslmode": <sslmode>,
"usesystemtruststore": <UseSystemTrustStore>,
"password": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "<Azure Key Vault linked service name>",
"type": "LinkedServiceReference"
},
"secretName": "<secretName>"
},
"driverVersion": "v2"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
バージョン 1.0 を使用する場合は、次のプロパティがサポートされます。
| Property | Description | Required |
|---|---|---|
| 型 | type プロパティを MySql に設定する必要があります。 | Yes |
| connectionString | Azure Database for MySQL インスタンスに接続するために必要な情報を指定します。 パスワードを Azure Key Vault に格納して、接続文字列から password 構成をプルすることもできます。 詳細については、下記の例と、「Azure Key Vault への資格情報の格納」の記事を参照してください。 |
Yes |
| connectVia | データ ストアに接続するために使用される統合ランタイム。 詳細については、「前提条件」セクションを参照してください。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 | No |
一般的な接続文字列は Server=<server>;Port=<port>;Database=<database>;UID=<username>;PWD=<password> です。 ケースごとにさらに多くのプロパティを設定できます。
| Property | Description | Required |
|---|---|---|
| sslMode | このオプションは、MySQL に接続するときにドライバーで TLS 暗号化および検証を使用するかどうかを指定します。 例: SSLMode=<0/1/2/3/4>。オプション: DISABLED (0) / PREFERRED (1) (既定値) / REQUIRED (2) / VERIFY_CA (3) / VERIFY_IDENTITY (4) |
Yes |
| SSLCert | クライアントの ID を証明するために使用される SSL 証明書を含む、.pem ファイルの完全パスと名前。 この証明書をサーバーに送信する前に暗号化するための秘密キーを指定するには、 SSLKey プロパティを使用します。 |
はい、双方向 SSL 検証を使用する場合。 |
| SSLKey | 双方向 SSL 検証中にクライアント側の証明書を暗号化するために使用される秘密キーを含むファイルの完全パスと名前。 | はい、双方向 SSL 検証を使用する場合。 |
| useSystemTrustStore | このオプションは、システムの信頼ストアと指定した PEM ファイルのどちらの CA 証明書を使用するかを指定します。 例: UseSystemTrustStore=<0/1>オプション: Enabled (1) / Disabled (0) (既定値) |
No |
Example:
{
"name": "MySQLLinkedService",
"properties": {
"type": "MySql",
"typeProperties": {
"connectionString": "Server=<server>;Port=<port>;Database=<database>;UID=<username>;PWD=<password>"
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
データセットのプロパティ
データセットを定義するために使用できるセクションとプロパティの完全な一覧については、データセットに関する記事をご覧ください。 このセクションでは、MySQL データセット でサポートされるプロパティの一覧を示します。
MySQL からデータをコピーする場合、次のプロパティがサポートされます。
| Property | Description | Required |
|---|---|---|
| 型 | データセットの "type" プロパティは、次のように設定する必要があります: MySqlTable | Yes |
| tableName | MySQL データベースのテーブルの名前。 | いいえ (アクティビティ ソースの "query" が指定されている場合) |
Example
{
"name": "MySQLDataset",
"properties":
{
"type": "MySqlTable",
"typeProperties": {},
"schema": [],
"linkedServiceName": {
"referenceName": "<MySQL linked service name>",
"type": "LinkedServiceReference"
}
}
}
RelationalTable 型のデータセットを使用していた場合、現状のまま引き続きサポートされますが、今後は新しいものを使用することをお勧めします。
コピー アクティビティのプロパティ
アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関する記事を参照してください。 このセクションでは、MySQL ソースでサポートされるプロパティの一覧を示します。
ソースとしての MySQL
MySQL からデータをコピーする場合、コピー アクティビティの source セクションで次のプロパティがサポートされます。
| Property | Description | Required |
|---|---|---|
| 型 | コピー アクティビティのソースの "type" プロパティは、次のように設定する必要があります:MySqlSource | Yes |
| クエリ | カスタム SQL クエリを使用してデータを読み取ります。 例: "SELECT * FROM MyTable"。 |
いいえ (データセットの "tableName" が指定されている場合) |
Example:
"activities":[
{
"name": "CopyFromMySQL",
"type": "Copy",
"inputs": [
{
"referenceName": "<MySQL input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "MySqlSource",
"query": "SELECT * FROM MyTable"
},
"sink": {
"type": "<sink type>"
}
}
}
]
RelationalSource 型のソースを使用していた場合は現状のまま引き続きサポートされますが、今後は新しいものを使用することをお勧めします。
MySQL のデータ型マッピング
MySQL からデータをコピーするとき、MySQL のデータ型から、サービスによって内部的に使用される中間データ型への、以下のマッピングが使用されます。 コピー アクティビティでソースのスキーマとデータ型がシンクにマッピングされるしくみについては、スキーマとデータ型のマッピングに関する記事を参照してください。
| MySQL のデータ型 | 中間サービスのデータ型 (バージョン 2.0 の場合) | 中間サービスのデータ型 (バージョン 1.0 の場合) |
|---|---|---|
| bigint | Int64 | Int64 |
| BIGINT UNSIGNED | UInt64 | Decimal |
| BIT(1) | UInt64 | ブール値 |
| BIT(M)、M>1 | UInt64 | Byte[] |
| BLOB | Byte[] | Byte[] |
| BOOL | Boolean (TreatTinyAsBoolean=false の場合、SByte としてマップされます。TreatTinyAsBoolean は既定で true です) |
Int16 |
| CHAR | String | String |
| DATE | Datetime | Datetime |
| DATETIME | Datetime | Datetime |
| DECIMAL | Decimal | DECIMAL、文字列 |
| DOUBLE | Double | Double |
| 倍精度 | Double | Double |
| ENUM | String | String |
| FLOAT | シングル | シングル |
| INT | Int32 | Int32 |
| INT UNSIGNED | Int64 | Int64 |
| INTEGER | Int32 | Int32 |
| 整数 (INTEGER) 符号なし (UNSIGNED) | UInt32 | Int64 |
| JSON | String | Byte[] |
| LONG VARBINARY | Byte[] | Byte[] |
| ロングバーチャー (LONG VARCHAR) | String | String |
| LONGBLOB | Byte[] | Byte[] |
| LONGTEXT | String | String |
| MEDIUMBLOB | Byte[] | Byte[] |
| MEDIUMINT | Int32 | Int32 |
| MEDIUMINT UNSIGNED | UInt32 | Int64 |
| MEDIUMTEXT | String | String |
| NUMERIC | Decimal | Decimal |
| real | Double | Double |
| SET | String | String |
| SMALLINT | Int16 | Int16 |
| SMALLINT UNSIGNED | UInt16 | Int32 |
| [TEXT] | String | String |
| TIME | TimeSpan | TimeSpan |
| TIMESTAMP | Datetime | Datetime |
| TINYBLOB | Byte[] | Byte[] |
| TINYINT | SByte | Int16 |
| TINYINT unsigned | Int16 | Int16 |
| TINYTEXT | String | String |
| VARCHAR | String | String |
| YEAR | int | int |
Lookup アクティビティのプロパティ
プロパティの詳細については、Lookup アクティビティに関するページを参照してください。
MySQL コネクタをアップグレードする
MySQL コネクタをアップグレードするのに役立つ手順を次に示します。
[リンク サービスの編集] ページの [バージョン] で [2.0] を選択し、「リンク サービスのプロパティ」を参照してリンク サービスを構成します。
バージョン 2.0 のデータ型マッピングは、バージョン 1.0 の場合とは異なります。 バージョン 2.0 のデータ型マッピングについては、「MySQL のデータ型マッピング」を参照してください。
バージョン 2.0 では、より多くの MySQL バージョンがサポートされています。 詳細については、「サポートされる機能」を参照してください。
MySQL コネクタ バージョン 2.0 のベスト プラクティス
このセクションでは、MySQL コネクタ バージョン 2.0 のベスト プラクティスについて説明します。
SSL キーを読み込めません
現象: 接続プロパティとして SSL キーを使用して MySQL コネクタ バージョン 2.0 を使用している場合は、次のエラー メッセージが表示されることがあります:
Could not load the client key from your_pem_file: Unrecognized PEM header: -----BEGIN PRIVATE KEY-----原因: バージョン 2.0 では PCKS#8 形式を復号化できません。
推奨事項: PEM 形式を PCKS#1 に変換します。
MySQL バージョン 2.0 とバージョン 1.0 の違い
次のテーブルは、バージョン 2.0 とバージョン 1.0 を使用する際 MySQL のデータ型マッピングの違いを示しています。
| MySQL のデータ型 | 中間サービスのデータ型 (バージョン 2.0 を使用する場合) | 中間サービスのデータ型 (バージョン 1.0 を使用する場合) |
|---|---|---|
| BIGINT UNSIGNED | UInt64 | Decimal |
| BIT(1) | UInt64 | ブール値 |
| BIT(M)、M>1 | UInt64 | Byte[] |
| BOOL | ブール値 | Int16 |
| DECIMAL | Decimal | DECIMAL、文字列 |
| 整数 (INTEGER) 符号なし (UNSIGNED) | UInt32 | Int64 |
| JSON | String | Byte[] |
| MEDIUMINT UNSIGNED | UInt32 | Int64 |
| SMALLINT UNSIGNED | UInt16 | Int32 |
| TINYINT | SByte | Int16 |
関連コンテンツ
Copy アクティビティでソースおよびシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。