LoginSignup
1
1

RDS for MySQL から HeatWave on AWS へ DMS レプリケーション

Last updated at Posted at 2023-09-10

こちらの記事、

で、

MySQL HeatWave on AWS does not support inbound replication.

インバウンドレプリケーションがサポートされていない点が大きなネックと感じます。

と書きましたが、インバウンドレプリケーションの代わりに DMS の CDC レプリケーションを試してみました。

2023/9/10 時点(MySQL バージョン 8.1.0-u2-cloud)の情報です。
今後、仕様が変わる可能性があります。

2023/9/10 現在、MySQL HeatWave on AWS の DB 作成画面には PrivateLINK を使うか Public IP Address 経由のアクセスを行うか選択するチェックボックスがあります。

しかし、PrivateLINK を使うのに必要な情報がまだ表示されないので、この記事では Public IP Address 経由のアクセスで試しています。

1. ソースとターゲットの DB を作成する

ソース DB として RDS for MySQL 8.0、ターゲット DB として MySQL HeatWave on AWS の DB System を作成します。

ソース DB でROW形式のバイナリログ(binlog)を有効にするのがポイントです。
今回は RDS for MySQL で試しましたが、Aurora MySQL をソース DB にすることも可能です。

1-1. DB パラメータグループを作成する

バイナリログをROW形式で指定する(binlog_format='ROW')RDS for MySQL 8.0 用のパラメータグループを作成します。
image.png

サブネットグループを作成していない場合は、後から作成する DMS のレプリケーションインスタンスからアクセス可能なサブネットグループも作成しておきます。

1-2. RDS for MySQL 8.0 インスタンスを作成する

ソース DB を作成します。
image.png

  • エンジンバージョンは 8.0.34
  • インスタンスタイプは任意で
  • 後から作成する DMS のレプリケーションインスタンスからアクセス可能なサブネットグループを指定
  • 同様に DMS のレプリケーションインスタンスからアクセス可能なセキュリティグループを作成・指定
    • TCP:3306 でインバウンド接続可能に

image.png

  • 先ほど作成した DB パラメータグループを指定
  • バックアップ保持期間は 1 日以上を指定
    • バイナリログを有効にするため

1-3. ソース DB にテストデータを投入する

テストデータの前にバイナリログ保持期間を設定しておきます。

mysql> call mysql.rds_set_configuration('binlog retention hours', 168);

テストデータはこちらの記事のサンプルデータを、HeatWave ではなく RDS にロード(投入)します。

サンプルデータの元の記事はこちらです。

1-4. MySQL HeatWave on AWS の DB System を作成する

こちらの記事を参考に、最小のシェイプで MySQL DB + HeatWave Cluster を作成します。

今回は MySQL version を 8.1.0 にしました(2023/9/10 現在、8.0.34 が見当たらなかったため)。

Networking については、「Enable public connectivity」のチェックを入れ、一旦データ確認に使う EC2 の Public IP Address(EC2 が Private Subnet にある場合は NAT インスタンス / NAT Gateway など)だけ登録しておきます。
image.png
作成が完了したら、「Hostname」を確認しメモしておきます。
image.png

1-5. ターゲット DB にデータベース(スキーマ)を作成する

念のため、ターゲット DB(MySQL DB System)にデータベースを作成しておきます。

CREATE DATABASE tpch;

2. DMS レプリケーションを設定する

今回はサーバーレスではなく通常のレプリケーションインスタンスを使って設定します。

2-1. DMS でレプリケーションサブネットグループを作成する

パブリックサブネットを指定して作成します。
image.png

2-2. DMS でレプリケーションインスタンスを作成する

テスト用の RDS を小さめのインスタンスで作成したので、レプリケーションインスタンスも小さめで OK です。
image.png
image.png

  • 先ほど作成したレプリケーションサブネットグループを選択
  • 「パブリックアクセス可能」にチェック

2-3. EC2 でレプリケーションインスタンスの Public IP Address を確認する

レプリケーションインスタンス作成完了後、EC2 の「ネットワークインターフェイス」で、「dms」で絞り込みをしてレプリケーションインスタンスの「パブリック IPv4 アドレス」を確認しメモしておきます。
image.png

2-4. MySQL HeatWave on AWS で DB System の Networking 設定を変更する

DMS レプリケーションインスタンスのパブリック IPv4 アドレスを「;」(セミコロン)区切りで追記します。
image.png

2-5. DMS でソースエンドポイントを作成する

RDS for MySQL 8.0 のインスタンスを指定して作成します。
image.png
エンドポイントの接続テストも実施しておきます。

2-6. DMS でターゲットエンドポイントを作成する

MySQL HeatWave on AWS の DB System を指定して作成します。
image.png

先にメモした Hostname を「サーバー名」に指定します。

2-7. DMS でデータ移行タスクを作成する

データ移行タスクを作成します。
image.png

  • 先ほど作成したレプリケーションインスタンスとソース・ターゲットのエンドポイントを指定
  • 移行タイプは「既存のデータを移行して、継続的な変更をレプリケートする」
    • 初期データの移行と CDC によるレプリケーションの両方を有効化

image.png

  • 今回のデータでは LOB 列は不要
  • 検証とタスクログはお好みで

image.png

  • テーブルマッピングの「選択ルール」でスキーマ名「tpch」の全テーブル(「%」)を「含む」に
  • 変換ルールは不使用

MySQL to MySQL のレプリケーションではFLOAT型・TIME型が正しく移行できないので、これらの列が存在する場合は変換ルールでreal4timeに型変換します。

その他、MySQL to MySQL の DMS レプリケーションにはいくつか気をつけるべき点があります。

3. DMS のレプリケーションを確認する

データ移行タスクを作成したら、初期データの移行(ロード)およびレプリケーションを確認します。

3-1. データ移行完了後の状態を確認する

初期データの移行(ロード)完了を待ちます。
image.png
「テーブル統計」を見てみます。
image.png
ロード完了時点では「挿入」・「削除」・「更新」などの各項目の値は0です。

また、ソース DB・ターゲット DB の両方でデータの状態を確認します。

mysql> USE tpch;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SHOW TABLES;
+----------------+
| Tables_in_tpch |
+----------------+
| customer       |
| lineitem       |
| nation         |
| orders         |
| part           |
| partsupp       |
| region         |
| supplier       |
+----------------+
8 rows in set (0.01 sec)

mysql> SELECT * FROM region;
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
| R_REGIONKEY | R_NAME      | R_COMMENT                                                                                                           |
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
|           0 | AFRICA      | lar deposits. blithely final packages cajole. regular waters are final requests. regular accounts are according to  |
|           1 | AMERICA     | hs use ironic, even requests. s                                                                                     |
|           2 | ASIA        | ges. thinly even pinto beans ca                                                                                     |
|           3 | EUROPE      | ly final courts cajole furiously final excuse                                                                       |
|           4 | MIDDLE EAST | uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl        |
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
5 rows in set (0.00 sec)

3-2. MySQL HeatWave on AWS で HeatWave へのオフロードを有効にする

こちらの記事のとおり HeatWave へのオフロードを有効にします。

元の記事はこちらです。

3-3. データをINSERTして CDC レプリケーションを確認する

ソース DB(RDS)でデータを 1 行INSERTしてみます。

mysql> INSERT INTO region SET R_REGIONKEY = 999, R_NAME = 'SPACE', R_COMMENT = 'outside the earth';

先ほどの「テーブル統計」を再確認します。
image.png
対象テーブル(region)の「挿入」「適用された挿入」がカウントアップされて1になっています。

ターゲット DB(MySQL DB System)で確認してみます。

mysql> USE tpch;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SELECT * FROM region;
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
| R_REGIONKEY | R_NAME      | R_COMMENT                                                                                                           |
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
|           0 | AFRICA      | lar deposits. blithely final packages cajole. regular waters are final requests. regular accounts are according to  |
|           1 | AMERICA     | hs use ironic, even requests. s                                                                                     |
|           2 | ASIA        | ges. thinly even pinto beans ca                                                                                     |
|           3 | EUROPE      | ly final courts cajole furiously final excuse                                                                       |
|           4 | MIDDLE EAST | uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl        |
|         999 | SPACE       | outside the earth                                                                                                   |
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
6 rows in set (0.00 sec)

mysql> SELECT /*+ SET_VAR(use_secondary_engine=FORCED) */ * FROM region;
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
| R_REGIONKEY | R_NAME      | R_COMMENT                                                                                                           |
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
|           0 | AFRICA      | lar deposits. blithely final packages cajole. regular waters are final requests. regular accounts are according to  |
|           1 | AMERICA     | hs use ironic, even requests. s                                                                                     |
|           2 | ASIA        | ges. thinly even pinto beans ca                                                                                     |
|           3 | EUROPE      | ly final courts cajole furiously final excuse                                                                       |
|           4 | MIDDLE EAST | uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl        |
|         999 | SPACE       | outside the earth                                                                                                   |
+-------------+-------------+---------------------------------------------------------------------------------------------------------------------+
6 rows in set (0.09 sec)

HeatWave も含めてデータが移行&レプリケーションされているのが確認できました。

mysql> SELECT
    ->     l_returnflag,
    ->     l_linestatus,
    ->     SUM(l_quantity) AS sum_qty,
    ->     SUM(l_extendedprice) AS sum_base_price,
    ->     SUM(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
    ->     SUM(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
    ->     AVG(l_quantity) AS avg_qty,
    ->     AVG(l_extendedprice) AS avg_price,
    ->     AVG(l_discount) AS avg_disc,
    ->     COUNT(*) AS count_order
    -> FROM
    ->     lineitem
    -> WHERE
    ->     l_shipdate <= DATE '1998-12-01' - INTERVAL '90' DAY
    -> GROUP BY l_returnflag , l_linestatus
    -> ORDER BY l_returnflag , l_linestatus;
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
| l_returnflag | l_linestatus | sum_qty     | sum_base_price  | sum_disc_price    | sum_charge          | avg_qty   | avg_price    | avg_disc | count_order |
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
| A            | F            | 37734107.00 |  56586554400.73 |  53758257134.8700 |  55909065222.827692 | 25.522005 | 38273.129734 | 0.049985 |     1478493 |
| N            | F            |   991417.00 |   1487504710.38 |   1413082168.0541 |   1469649223.194375 | 25.516471 | 38284.467760 | 0.050093 |       38854 |
| N            | O            | 74476040.00 | 111701729697.74 | 106118230307.6056 | 110367043872.497010 | 25.502226 | 38249.117988 | 0.049996 |     2920374 |
| R            | F            | 37719753.00 |  56568041380.90 |  53741292684.6040 |  55889619119.831932 | 25.505793 | 38250.854626 | 0.050009 |     1478870 |
+--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+
4 rows in set (1.08 sec)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1