mysql_fdw 拡張機能による MySQL データベースの操作
RDS for PostgreSQL DB インスタンスから MySQL 互換データベースにアクセスするには、mysql_fdw
拡張機能をインストールしそれを使用します。この外部データラッパーを使用すると、RDS for MySQL、Aurora MySQL、MariaDB、その他の MySQL 互換データベースを操作できます。RDS for PostgreSQL DB インスタンスから MySQL データベースへの接続は、クライアントとサーバーの設定に応じて、ベストエフォートベースで暗号化されます。ただし、必要に応じて暗号化を強制できます。詳細については、「拡張機能で転送中の暗号化を使用する」を参照してください。
mysql_fdw
拡張機能は、Amazon RDS for PostgreSQL バージョン 14.2、13.6 以降のリリースでサポートされています。MySQL 互換データベースインスタンス上のテーブルに対する RDS for PostgreSQL DB での選択、挿入、更新、および削除をサポートします。
トピック
mysql_fdw 拡張機能を使用するように RDS for PostgreSQL DB をセットアップする
RDS for PostgreSQL DB インスタンスでの mysql_fdw
拡張機能のセットアップには、DB インスタンスでの拡張機能のロードと、MySQL DB インスタンスへの接続ポイントの作成が関係しています。このタスクでは、MySQL DB インスタンスに関する次の詳細が必要です。
ホスト名またはエンドポイント。RDS for MySQL DB インスタンスの場合、コンソールを使用してエンドポイントを見つけることができます。[接続とセキュリティ] タブを選択し、[エンドポイントとポート] セクションを確認します。
ポート番号。MySQL のデフォルトポート番号は 3306 です。
データベースの名前 DB 識別子。
また、MySQL ポート 3306 のセキュリティグループまたはアクセスコントロールリスト (ACL) へのアクセスを提供する必要があります。RDS for PostgreSQL DB インスタンスと RDS for MySQL DB インスタンスの両方がポート 3306 にアクセスする必要があります。アクセスが正しく設定されていない場合、MySQL 互換テーブルに接続しようとすると、次のようなエラーメッセージが表示されます。
ERROR: failed to connect to MySQL: Can't connect to MySQL server on 'hostname
.aws-region
.rds.amazonaws.com:3306' (110)
次の手順では、ユーザーが (rds_superuser
アカウントとして) 外部サーバーを作成します。次に、外部サーバーへのアクセスを特定のユーザーに付与します。その後、これらのユーザーは、MySQL DB インスタンスを操作するための適切な MySQL ユーザーアカウントへの独自のマッピングを作成します。
mysql_fdw を使用して MySQL データベースサーバーにアクセスするには
rds_superuser
ロールがあるアカウントを使用して PostgreSQL DB インスタンスを接続します。 RDS for PostgreSQL DB インスタンスの作成時にデフォルトを受け入れた場合、ユーザー名はpostgres
であり、psql
コマンドラインツールを使用して次のように接続できます。psql --host=
your-DB-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres –-password次のように
mysql_fdw
拡張機能をインストールします。postgres=>
CREATE EXTENSION mysql_fdw;
CREATE EXTENSION
拡張機能が RDS for PostgreSQL DB インスタンスにインストールされたら、MySQL データベースへの接続を提供する外部サーバーをセットアップします。
外部サーバーを作成するには
RDS for PostgreSQL DB インスタンス でこれらのタスクを実行します。このステップは、rds_superuser
特権 (postgres
など) があるユーザーとして接続していることを前提としています。
RDS for PostgreSQL DB インスタンスで外部サーバーを作成します。
postgres=>
CREATE SERVER
mysql-db
FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'db-name.111122223333
.aws-region
.rds.amazonaws.com', port '3306');CREATE SERVER
適切なユーザーに外部サーバーへのアクセスを付与します。これらは、管理者以外のユーザー、つまり、
rds_superuser
ロールのないユーザーである必要があります。postgres=>
GRANT USAGE ON FOREIGN SERVER
mysql-db
touser1
;GRANT
PostgreSQL ユーザーは、外部サーバーを介して MySQL データベースへの独自の接続を作成し、管理します。
例: RDS for PostgreSQL から RDS for MySQL データベースを操作する
RDS for PostgreSQL DB インスタンスにシンプルなテーブルがあると仮定します。RDS for PostgreSQL ユーザーが、そのテーブルで (SELECT
)、INSERT
、UPDATE
、DELETE
の項目をクエリしたいと思っています。mysql_fdw
拡張機能は、前の手順で詳述されているように、RDS for PostgreSQL DB インスタンスで作成された、と仮定します。rds_superuser
権限のあるユーザーとして RDS for PostgreSQL DB インスタンスに接続した後、次の手順に進むことができます。
RDS for PostgreSQL DB インスタンスで外部サーバーを作成します。
test=>
CREATE SERVER
mysqldb
FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'your-DB
.aws-region
.rds.amazonaws.com', port '3306');CREATE SERVER
rds_superuser
の許可を持たないユーザーに、(例えばuser1
として) 使用を許可します。test=>
GRANT USAGE ON FOREIGN SERVER mysqldb TO user1;
GRANT
user1
として接続し、MySQL ユーザーへのマッピングを作成します。test=>
CREATE USER MAPPING FOR
user1
SERVER mysqldb OPTIONS (username 'myuser
', password 'mypassword
');CREATE USER MAPPING
MySQL テーブルにリンクされた外部テーブルを作成します。
test=>
CREATE FOREIGN TABLE
mytab
(a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name '');CREATE FOREIGN TABLE
外部テーブルに対して単純なクエリを実行します。
test=>
SELECT * FROM mytab;
a | b ---+------- 1 | apple (1 row)
MySQL テーブルでのデータの追加、変更、削除を行うことができます。例:
test=>
INSERT INTO mytab values (2, 'mango');
INSERT 0 1
SELECT
クエリをもう一度実行して、結果を確認します。test=>
SELECT * FROM mytab ORDER BY 1;
a | b ---+------- 1 | apple 2 | mango (2 rows)
拡張機能で転送中の暗号化を使用する
RDS for PostgreSQL から MySQL への接続は、デフォルトで転送中の暗号化 (TLS/SSL) を使用します。ただし、クライアントとサーバーの設定が異なる場合、接続は暗号化されていない状態に戻ります。RDS for MySQL ユーザアカウントの REQUIRE SSL
オプションを指定して、すべての発信接続に対して暗号化を適用できます。この同じアプローチは MariaDB および Aurora MySQL ユーザーアカウントでも機能します。
REQUIRE SSL
に構成された MySQL ユーザーアカウントの場合、安全な接続を確立できないと接続の試行は失敗します。
既存の MySQL データベースユーザーアカウントの暗号化を強制するには、ALTER USER
コマンドを使用できます。次の表に示すとおり、構文は MySQL のバージョンによって異なります。詳細については、MySQL リファレンスマニュアルの ALTER USER
MySQL 5.7、MySQL 8.0 | MySQL 5.6 |
---|---|
|
|
mysql_fdw
拡張機能の詳細については、mysql_fdw