すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:mysql_fdw拡張子を使用してMySQLデータにアクセスする

最終更新日:Sep 27, 2024

AnalyticDB for PostgreSQLを使用すると、mysql_fdw拡張機能を使用して、データをAnalyticDB for PostgreSQLに書き込むことなく、MySQLサーバー上のデータにアクセス、追加、削除、変更、クエリを実行できます。

使用上の注意

MySQL外部テーブルに対してUPDATE、DELETE、INSERTなどのDML操作を実行する場合、ソーステーブルは最初の列を一意の主キー列または複合主キーの一部として使用する必要があります。 主キー制約制限はSELECT操作には適用されません。

前提条件

入門ガイド

mysql_fdw拡張機能を使用してリモートMySQLデータベース上のデータにアクセスするには、次の手順を実行します。

  1. AnalyticDB for PostgreSQLコンソールにログインします。 管理するAnalyticDB for PostgreSQLインスタンスを見つけ、インスタンスIDをクリックして、インスタンスの [基本情報] ページに移動します。

  2. ページの右上隅にある [データベースにログイン] をクリックします。 [データベースインスタンスへのログイン] ダイアログボックスで、[データベースアカウント][データベースパスワード] パラメーターを設定し、[ログイン] をクリックします。

  3. データベースを入力し、CREATE SERVERステートメントを実行して、アクセスするMySQLデータベースとして外部サーバーを作成します。 サンプル文:

    -- Create a foreign server named mysql_svr.
    CREATE SERVER mysql_svr FOREIGN DATA WRAPPER mysql_fdw
      OPTIONS (host '127.0.0.1', port '3306');
    
    -- Create a user mapping for the mysql_svr server by specifying the username and the password that are used to access the MySQL database.
    CREATE USER MAPPING FOR public SERVER mysql_svr
      OPTIONS (username '$MYSQL_USER_NAME', password '$MYSQL_PASS');
    
    -- Use the mysql_svr server to create a foreign table.
    CREATE FOREIGN TABLE test_foreign_table(
      c1 INT,
      c2 INT,
      c3 TEXT,
      c4 TEXT)
      SERVER mysql_svr OPTIONS(dbname 'mysql_fdw_database', table_name 'test_foreign_table');

    パラメーター:

    • CREATE SERVER: 外部サーバーを作成します。 外部サーバーは、アクセスするMySQLデータベースを指定します。

    • CREATE USER MAPPING: ユーザーマッピングを作成します。 MySQLデータベースへのアクセスに使用するユーザー名とパスワードを指定する必要があります。

    • CREATE FOREIGN TABLE: 外部テーブルを作成します。 外部テーブルの列名は、アクセスするリモートテーブルの列名と一致する必要があります。 また、IMPORT FOREIGN SCHEMAステートメントを実行して、mysql_fdw拡張子が、アクセスするMySQLテーブルのAnalyticDB for PostgreSQLインスタンスに外部テーブルを自動的に作成できるようにすることもできます。

  4. MySQLデータベースのデータに対して、クエリ、挿入、追加、および削除の操作を実行します。 上記の操作のみがサポートされています。

構文

サーバーの作成

外部サーバーを作成します。

CREATE SERVER [IF NOT EXISTS] server_name [TYPE 'server_type'] [VERSION 'server_version']
    FOREIGN DATA WRAPPER fdw_name
    [OPTIONS([mpp_execute 'any | master | all segments' ], option 'value' [, ... ])]

オプション 'value' パラメーターのサポートされている値

オプション

説明

デフォルト値

host

アクセスするMySQLデータベースのIPアドレス。

127.0.0.1

port

アクセスするMySQLデータベースのポート番号。

3306

init_command

アクセスするMySQLデータベースとの接続を確立するために使用されるSQL文。

Empty

secure_auth

V5.7.5以前は、MySQLはpassword() 関数を使用して平文パスワードを暗号化パスワードに変換します。 secure_authオプションは、前述の暗号化方法を外部サーバーで使用するかどうかを指定します。

true

use_remote_estimate

EXPLAINステートメントを実行して、実行計画を生成するためにMySQLからテーブル統計を取得するかどうかを指定します。

false

reconnect

自動再接続を許可するかどうかを指定します。

false

character_set

接続に使用される文字セット。 デフォルト値はautoで、MySQLクライアントがデプロイされているOSの文字セットを指定します。

auto

sql_mode

MySQLのSQLモード。これは、SQL構文とデータ検証チェックに影響を与えるために使用されます。 詳細については、次をご参照ください:

サーバーSQLモード

ANSI_QUOTES

ssl_key

MySQLクライアント上の秘密鍵ファイルのパス名。

Empty

ssl_cert

MySQLクライアントの公開キー証明書のパス名。

Empty

ssl_ca

認証局 (CA) によって発行された証明書のパス名。 このオプションを指定すると、外部サーバーは同じ証明書を使用します。

Empty

ssl_capath

信頼できるSSL CA証明書が格納されているディレクトリのパス名。

Empty

ssl_cipher

SSL暗号化に使用できるパスワード。

<none>

fetch_size

mysql_fdw拡張子の各実行によって取得される行数。 外部テーブルにfetch_sizeオプションを指定すると、外部サーバーに指定したfetch_sizeオプションの値が上書きされます。

100

CREATE USER MAPPING

CREATE USER MAPPINGステートメントを実行して、ユーザーマッピングを作成します。

CREATE USER MAPPING [ IF NOT EXISTS ] FOR { user_name | USER | CURRENT_USER | PUBLIC }
    SERVER server_name
    [ OPTIONS ( option 'value' [ , ... ] ) ]

オプション 'value' パラメーターのサポートされている値

オプション

説明

デフォルト値

username

MySQLデータベースへのアクセスに使用されるユーザー名。

Empty

password

MySQLデータベースへのアクセスに使用されるパスワード。

Empty

FOREIGNテーブルの作成

データベース管理システムで外部テーブルを作成します。

CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
    | table_constraint }
    [, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
  SERVER server_name
[ OPTIONS ( [ mpp_execute 'any | master | all segments' ], option 'value' [, ... ] ) ]

オプション 'value' パラメーターのサポートされている値

オプション

説明

デフォルト値

dbname

作成した外部データベースの名前。

Empty

table_name

作成する外部テーブルの名前。

カスタム名AnalyticDB for PostgreSQL

fetch_size

mysql_fdw拡張子の各実行によって取得される行数。 外部テーブルにfetch_sizeオプションを指定すると、外部サーバーに指定したfetch_sizeオプションの値が上書きされます。

100

IMPORT FOREIGN SCHEMA

MySQLテーブルに関する情報をAnalyticDB for PostgreSQLにインポートして、情報を外部テーブルとして保存します。

IMPORT FOREIGN SCHEMA remote_schema
    [ { LIMIT TO | EXCEPT } ( table_name [, ...] ) ]
    FROM SERVER server_name
    INTO local_schema
    [ OPTIONS ( option 'value' [, ... ] ) ]

オプション 'value' パラメーターのサポートされている値

オプション

説明

デフォルト値

import_default

外部テーブルスキーマを同期するときに、既定の式をインポートするかどうかを指定します。

FALSE

import_not_null

外部テーブルスキーマを同期するときにNULL以外の式をインポートするかどうかを指定します。

TRUE

import_enum_as_text

ENUMタイプのMySQLデータをTEXTタイプにマップするかどうかを指定します。 import_enum_as_textオプションをFALSEに設定すると、TEXTタイプのデータを作成するように求められます。

FALSE

互換性

AnalyticDB for PostgreSQLのmysql_fdw拡張機能は、次のMySQLインスタンスおよびデータベースと互換性があります。

ApsaraDB RDS for MySQL

バージョン番号

互換性

5.5

継続する

5.6

継続する

5.7

継続する

8.0

継続する

自己管理MySQLデータベース

V5.7より前のMySQLバージョンは維持されなくなりました。 ほとんどの場合、MySQL V5.7以降が使用されます。

バージョン番号

互換性

5.7

継続する

8.0 (主に使用される)

継続する

PolarDB for MySQL

バージョン番号

互換性

8.0.2

継続する

8.0.1

継続する

5.7

継続する

5.6

継続する

機能とデータ型

機能

接続プール

同じセッション内のすべてのクエリは、新しいMySQL接続の代わりに同じMySQLデータベース接続を使用します。

プッシュダウンの場所

外部テーブルのWHERE句がMySQLにプッシュされます。 このようにして、外部テーブルに関連するWHERE条件がMySQLで実行され、AnalyticDB for PostgreSQLインスタンスに送信されるデータの行が少なくなります。

投影プッシュダウン

MySQLテーブルのすべてのデータが照会され、AnalyticDB for PostgreSQLインスタンスに送信されるわけではありません。 mysql_fdw拡張子は、SELECTステートメントを実行して照会するテーブル内の列のみを返します。 これにより、AnalyticDB for PostgreSQLインスタンスに送信されるデータが少なくなり、パフォーマンスが向上します。

準備されたステートメント

SELECTクエリは、単純なSELECTステートメントの代わりに準備済みステートメントを使用して実行されます。

プッシュダウンに参加

同じMySQLデータベース内の2つの外部テーブル間の結合操作は、実行のためにリモートMySQLデータベースにプッシュダウンされます。 これにより、2つのテーブルのすべての行を取得し、AnalyticDB for PostgreSQLインスタンスで結合操作を実行する方法と比較して、パフォーマンスが向上します。

説明
  • 潜在的な接続障害の問題を防ぐために、リレーショナル演算子と算術演算子を含むJOIN句のみをプッシュダウンできます。

  • INNER JOIN、LEFT OUTER JOIN、およびRIGHT OUTER JOIN句のみがサポートされています。 FULL OUTER JOIN、SEMI JOIN、またはANTI JOIN句はサポートされていません。

集約プッシュダウン

集計関数は、実行のためにリモートMySQLデータベースにプッシュダウンされます。 これにより、すべての行を取得し、AnalyticDB for PostgreSQLインスタンスで集計操作を実行する方法と比較して、パフォーマンスが向上します。

説明

集約プッシュダウンは、MIN() 、MAX() 、SUM() 、AVG() 、およびCOUNT() 関数のみをサポートする。

pushdownによる注文

ORDER BY句は、MySQLから順序付けられた結果セットを取得するために実行するためにリモートMySQLデータベースにプッシュダウンされます。 MySQLデータベースは、AnalyticDB for PostgreSQLとは逆の方法でNULL関連の操作を実行します。 AnalyticDB for PostgreSQLの結果と同じ結果を取得するには、各ORDER BY句の先頭に式is NULL述語を追加します。 このように、MySQLは、昇順でソートされた結果セットの後にNULL値を配置します。

LIMITおよびOFFSETプッシュダウン

LIMIT句とOFFSET句は、実行のためにリモートMySQLデータベースにプッシュダウンされます。 これにより、すべてのデータをAnalyticDB for PostgreSQLインスタンスに送信する方法と比較して、AnalyticDB for PostgreSQLインスタンスとMySQLデータベース間で送信されるデータ量が削減されます。

データ型

いいえ

MySQLデータ型

AnalyticDB for PostgreSQLデータ型

1

ビット (N)

ビット (N)

2

TINYINT

SMALLINT

3

TINYINT UNSIGNED

SMALLINT

4

SMALLINT

SMALLINT

5

SMALLINT未確認

BIGINT

6

MEDIUMINT

INT

7

MEDIUMINT UNSIGNED

INT

8

INT

INT

9

INT UNSIGNED

BIGINT

10

BIGINT

BIGINT

11

署名されていないBIGINT

NUMERIC

12

デシマル (M、N)

NUMERIC

13

FLOAT

REAL

14

ダブル (M、N)

DOUBLE PRECISION

15

日付

日付

16

日付時刻

TIMEゾーンなしのDATETIME

17

TIMESTAMP

TIMEゾーンなしのDATETIME

18

時間

TIMEゾーンなしのTIME

19

年 [4]

非対応

20

CHAR[N]

CHAR[N]

21

VARCHAR[N]

キャラクターVARYING(N)

22

バイナリ [N]

BYTEA

23

VARBINARY[N]

BYTEA

24

TINYBLOB

非対応

25

TINYTEXT

TEXT

26

BLOB

bytea

27

TEXT

TEXT

28

MEDIUMBLOB

BYTEA

29

MEDIUMTEXT

TEXT

30

LONGBLOB

BYTEA

31

LONGTEXT

TEXT

32

ENUM(",")

ENUM型のデータを手動で作成するように促す

33

セット ('','')

非対応

34

GEOMETRY

非対応

35

ポイント

ポイント

36

LINESTRING

非対応

37

ポリゴン

ポリゴン

38

マルチポイント

非対応

39

MULTILINESTRING

非対応

40

マルチポリゴン

非対応

41

GEOMETRCOLLECTION

非対応

42

JSON

JSON