AnalyticDB for MySQL Data Warehouse Edition (V3.0) を使用すると、Elastic Compute Service (ECS) インスタンス上でホストされている自己管理 MySQL データベースにデータをエクスポートできます。このエクスポートでは外部テーブルをブリッジとして使用します。具体的には、送信先の MySQL データベースを指す外部テーブルを作成し、単一の SQL ステートメントでそのテーブルにデータを書き込みます。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
AnalyticDB for MySQL クラスターと同じ VPC およびリージョン内に ECS インスタンスが存在すること
その ECS インスタンス上で自己管理 MySQL データベースがホストされていること
ECS セキュリティグループルールで、MySQL ポート(通常は 3306)に対するインバウンドトラフィックが許可されていること。詳細については、「セキュリティグループルールの追加」をご参照ください。
エクスポートするテストデータが準備されていること
(エラスティックモードの場合必須)ENI が クラスター情報 ページの ネットワーク情報 セクションで有効になっていること
本ガイドで使用する設定例:
送信先は、test_adb という名前の ECS 上の MySQL データベースで、次のように courses テーブルが作成されています。
CREATE TABLE courses (
id bigint NOT NULL,
name varchar(32) NOT NULL,
grade varchar(32) NOT NULL,
submission_date timestamp NOT NULL,
PRIMARY KEY (id)
);外部テーブルを使用したデータエクスポート
このプロシージャでは、AnalyticDB for MySQL 内にソーステーブルを作成し、送信先の MySQL データベースにマップされた外部テーブルを作成した後、その外部テーブルにデータを書き込みます。
ステップ 1:AnalyticDB for MySQL クラスターへの接続
クラスターに接続します。詳細については、「AnalyticDB for MySQL クラスターへの接続」をご参照ください。
ステップ 2:ソースデータベースの作成
クラスター内に、エクスポートするデータを格納するデータベースを作成します。詳細については、「データベースの作成」をご参照ください。
本ガイドでは、adb_demo という名前のデータベースを使用します。
ステップ 3:ソーステーブルの作成とデータの挿入
次のステートメントを実行して、adb_demo 内に courses テーブルを作成します。
CREATE TABLE courses (
id bigint AUTO_INCREMENT,
name varchar NOT NULL,
grade varchar DEFAULT '1st Grade',
submission_date timestamp
) DISTRIBUTED BY HASH(id);テストデータを 1 行挿入します。
INSERT INTO courses (name,submission_date) VALUES("Jams",NOW());ステップ 4:外部テーブルの作成
外部テーブルは送信先の MySQL データベースにマップされます。次のステートメントを実行して、adb_demo 内に courses_external_table という名前の外部テーブルを作成します。
CREATE TABLE IF NOT EXISTS courses_external_table(
id bigint NOT NULL,
name varchar(32) NOT NULL,
grade varchar(32) NOT NULL,
submission_date timestamp NOT NULL,
PRIMARY KEY (id)
)
ENGINE='mysql'
TABLE_PROPERTIES='{
"url":"jdbc:mysql://mysql-vpc-address:3306/test_adb",
"tablename":"courses",
"username":"mysql-user-name",
"password":"mysql-user-password",
"charset":"utf8"
}';必須パラメーター:
| パラメーター | 説明 |
|---|---|
ENGINE='mysql' | 外部テーブルのストレージエンジンです。MySQL データベースに接続するには、mysql に設定します。 |
TABLE_PROPERTIES | AnalyticDB for MySQL クラスターが ECS 上の自己管理 MySQL データベース内のデータにアクセスするために使用する接続情報です。 |
url | 送信先 MySQL データベースの JDBC URL です。ECS インスタンスの プライマリプライベート IP アドレス または VPC エンドポイントを使用します。フォーマット:jdbc:mysql://<primary-private-ip>:3306/<database-name>。例:jdbc:mysql://192.168.128.***:3306/test_adb。ECS インスタンスのプライマリプライベート IP アドレスを確認するには、ECS コンソール を開き、該当インスタンスを選択して、インスタンス詳細 タブの ネットワーク情報 セクションにある プライマリプライベート IP アドレス を確認します。 |
tablename | MySQL データベース内の送信先テーブルの名前です。 |
username | MySQL データベースに接続するために使用するデータベースアカウントのユーザー名です。 |
password | データベースアカウントのパスワードです。 |
オプションパラメーター:
| パラメーター | デフォルト | 説明 |
|---|---|---|
charset | utf8 | ソースデータベースの文字セットです。有効な値:gbk、utf8、utf8mb4。 |
ステップ 5:データのエクスポート
次のステートメントを実行して、ソーステーブルから外部テーブル経由で送信先の MySQL データベースにデータを書き込みます。
REPLACE INTO courses_external_table
SELECT * FROM courses;エクスポート結果の確認
test_adb MySQL データベースに接続し、次のコマンドを実行します。
SELECT * FROM courses LIMIT 100;エクスポートされた行が courses 送信先テーブルに表示されることを確認します。
トラブルシューティング
MySQL データベースに接続できない
最も一般的な原因は、ECS インスタンスのセキュリティグループルールが不足しているか、誤っていることです。ポート 3306 が AnalyticDB for MySQL クラスターからのインバウンドトラフィックに対して許可されていることを確認してください。「セキュリティグループルールの追加」をご参照ください。
ポートが開放されているにもかかわらず接続が失敗する場合は、以下の点を確認してください。
TABLE_PROPERTIES内のurlが ECS インスタンスの プライマリプライベート IP アドレス を使用しており、パブリック IP ではないことを確認します。usernameおよびpasswordが正しいことを確認します。JDBC URL のフォーマットが
jdbc:mysql://<ip>:3306/<database-name>であり、末尾にスラッシュや余分な文字が含まれていないことを確認します。
エクスポート後に送信先テーブルにデータが表示されない
REPLACE INTO を実行する前に、AnalyticDB for MySQL クラスター内で SELECT * FROM courses LIMIT 10; を実行して、ソーステーブルにデータが含まれていることを確認します。
また、courses_external_table のスキーマが test_adb 内の送信先テーブルと一致していることを確認します。列の型または名前が一致しない場合、書き込みが失敗したりエラーが発生したりする可能性があります。
次のステップ
自己管理 MySQL データベースから AnalyticDB for MySQL にデータをインポートするには、同じ ENGINE='mysql' 構文で外部テーブルを作成し、INSERT INTO ... SELECT * を使用してデータを読み取ります。