Amazon Aurora から MDS(HeatWave) へのレプリケーション
こんにちは。Oracle Cloud Infrastructure(OCI)特集 編集部です。
前回は MySQL Database Service (MDS)のHeatWave機能を使用したブログを記載しました。
MDSのHeatWave機能を使ってみた
今回は「Amazon Aurora を本番運用DB、MDS(HeatWave)をデータ分析用DB」という環境の構築を想定し、
Aurora⇒MDSへのレプリケーションを行ってみます。
AuroraとのレプリケーションはOCIマニュアルに記載されていないため、サポートされた構成ではありません。あくまでも弊社環境における検証結果とご認識ください。
■構成図
■前準備
構成図のようにAWS・OCIのネットワーク環境(VPNを除く)が構築され、
Aurora・MDSを操作するための検証サーバ(Linux)では mysqlコマンドが
使用可能な状態になっているものとします。
■作業の流れ
1.Aurora作成
2.OCI HeatWave作成
3.AWS ⇔ OCI VPN接続設定
4.レプリケーション設定
5.検証
■参考
・MDS Replication のOCIマニュアル(英語)
https://docs.oracle.com/en-us/iaas/mysql-database/doc/replication.html
・[Oracle Cloud] Amazon Aurora から MDS へ Inbound Replication してみた
https://qiita.com/sugimount/items/d24ee900de1001337b87
1.Aurora作成
まずはAWS側にてAuroraを作成するのですが、
MDS側のレプリケーションの制限事項は下記の通りです。
※マニュアル抜粋
・行ベースのレプリケーションのみサポート
・GTIDベースのレプリケーションのみサポート
・マルチソースレプリケーションはサポート対象外
・レプリケーションフィルターはサポート対象外
・mysqlスキーマへの変更は複製されず、複製が停止する
・ソースはlower_case_table_names、DBシステムと同じ値で実行する必要がある。
この値は0で現在、変更することはできない。
・インバウンドアプライヤーは、DBシステムの管理者ユーザーの権限で実行される。
上記の制限事項より、Auroraのデフォルト設定ではGTIDが無効になっていたりしますので、
パラメータグループを作成し、次の設定を行います。
・enforce_gtid_consistency ⇒ON に設定
・gtid-mode ⇒ON に設定
・binlog_format ⇒ROW に変更
また、Auroraは MySQL5.7ベースでキャラクタセットのデフォルトで latin1 だったりしますので、
予め下記も設定しておきます。
※MDSの MySQL8.0 のデフォルトは utf8mb4 です。
・character_set_database ⇒utf8mb4 に変更
・character_set_server ⇒utf8mb4 に変更
それでは実際にAuroraを作成します。
赤枠で囲った部分を環境に合わせて設定しますが、
パラメータグループは前の手順で作成したものを設定します。
作成後、「種類」が「書き込み」のエンドポイント名を確認します。
※ここでは「mds-heatwave-demo-aurora-cluster1.cluster-c4naunmu7bjw.ap-northeast-1.rds.amazonaws.com」でした。
作成したAuroraへ接続するにあたり、
検証サーバ(linux)からmysqlコマンドを実行して接続します。
$ mysql -u admin -p -h mds-heatwave-demo-aurora-cluster1.cluster-c4naunmu7bjw.ap-northeast-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MDS⇒Auroraへ接続してレプリケーションを行うためのユーザーを作成するにあたり、
下記を実行します。
※ここではユーザ名を「repluser」、パスワードを「[任意のパスワード]」と記載していますが、
これらは後程、MDSのチャネル作成時に使用するためメモしておきます。
mysql> CREATE USER repluser@'%' IDENTIFIED BY '[任意のパスワード]';
Query OK, 0 rows affected (0.01 sec)
mysql>
レプリケーション用ユーザへの権限設定を行います。mysql> GRANT REPLICATION SLAVE on *.* to repluser@'%';
Query OK, 0 rows affected (0.01 sec)
mysql>
2.OCI HeatWave作成
OCI側にてMDS(HeatWave)を作成します。
こちらの手順は以前のブログをご参照ください。
MySQL Database Service (MDS)を使ってみた
MDSのHeatWave機能を使ってみた
3.AWS ⇔ OCI VPN接続設定
続いてレプリケーションを行うにあたり AWS ⇔ OCI 間でのVPN接続を行うのですが、
こちらの手順は前々回のブログをご参照ください。
OCIとAWSでVPN接続をしてみた(マネージドサービス同士で接続)
4.レプリケーション設定
Aurora側にて下記のように実行します。
このうち、「gtid_executed」と表示された箇所をメモしておきます。
※ここでは c1723852-f03f-3146-b44e-daa18a5bb569:1-209 ですね。
mysql> show global variables like 'GTID%';
+----------------------------------+--------------------------------------------+
| Variable_name | Value |
+----------------------------------+--------------------------------------------+
| gtid_executed | c1723852-f03f-3146-b44e-daa18a5bb569:1-209 |
| gtid_executed_compression_period | 1000 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | c1723852-f03f-3146-b44e-daa18a5bb569:1-10 |
+----------------------------------+--------------------------------------------+
5 rows in set (0.03 sec)
mysql>
MDSに接続し、下記を実行してGTIDを確認します。
まだGTIDが設定されていない状態です。
mysql> show global variables like 'GTID%';
+----------------------------------+-------+
| Variable_name | Value |
+----------------------------------+-------+
| gtid_executed | |
| gtid_executed_compression_period | 0 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | |
+----------------------------------+-------+
5 rows in set (0.00 sec)
[2021-03-12 16:29:50.587]
mysql>
続いて、下記を実行してGTIDを設定します。
mysql> call sys.set_gtid_purged("c1723852-f03f-3146-b44e-daa18a5bb569:1-209");
Query OK, 0 rows affected (0.01 sec)
mysql>
下記を実行し、GTIDが設定されたことを確認します。mysql> show global variables like 'GTID%';
+----------------------------------+--------------------------------------------+
| Variable_name | Value |
+----------------------------------+--------------------------------------------+
| gtid_executed | c1723852-f03f-3146-b44e-daa18a5bb569:1-209 |
| gtid_executed_compression_period | 0 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | c1723852-f03f-3146-b44e-daa18a5bb569:1-209 |
+----------------------------------+--------------------------------------------+
5 rows in set (0.00 sec)
mysql>
続いてMDSにてチャネルを作成するにあたり、
OCI Webコンソールにて該当のMDSの画面へ移動します。
画面の左下の「チャネル」をクリックし、「チャネルの作成」を押下します。
名前には任意の名前を入力し、
「ソース接続」の箇所にてAuroraの情報を入力します。
ホスト名:mds-heatwave-demo-aurora-cluster1.cluster-ro-c4naunmu7bjw.ap-northeast-1.rds.amazonaws.com ※Auroraのエンドポイント名
ポート名:3306
ユーザー名:repluser ※「1.Aurora作成」の中で設定したユーザ名
パスワード:※「1.Aurora作成」の中で設定したパスワード
パスワードの確認:※「1.Aurora作成」の中で設定したパスワードを再入力
5.検証
実際に、Aurora側にデータを入れ込んでみます。
検証にあたり、データはMySQLのサイトの「employee data」を使ってみます。
https://dev.mysql.com/doc/index-other.html
AWS側の検証サーバにて下記を行います。
※gitも予めインストールしておきます。$ git clone https://github.com/datacharmer/test_db
$ cd test_db
$ mysql -u admin -p -h mds-heatwave-demo-aurora-cluster1.cluster-c4 naunmu7bjw.ap-northeast-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql>
mysql> source employees.sql
Query OK, 0 rows affected, 1 warning (0.01 sec)
Query OK, 1 row affected (0.01 sec)
Database changed
+-----------------------------+
| INFO |
+-----------------------------+
| CREATING DATABASE STRUCTURE |
+-----------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected, 6 warnings (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
+------------------------+
| INFO |
+------------------------+
| storage engine: InnoDB |
+------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.07 sec)
~~ 中略 ~~
Query OK, 0 rows affected (0.08 sec)
+---------------------+
| INFO |
+---------------------+
| LOADING departments |
+---------------------+
1 row in set (0.00 sec)
Query OK, 9 rows affected (0.01 sec)
Records: 9 Duplicates: 0 Warnings: 0
+-------------------+
| INFO |
+-------------------+
| LOADING employees |
+-------------------+
1 row in set (0.00 sec)
Query OK, 17944 rows affected (0.32 sec)
Records: 17944 Duplicates: 0 Warnings: 0
~~ 中略 ~~
Query OK, 16209 rows affected (0.29 sec)
Records: 16209 Duplicates: 0 Warnings: 0
+------------------+
| INFO |
+------------------+
| LOADING dept_emp |
+------------------+
1 row in set (0.00 sec)
Query OK, 24940 rows affected (0.64 sec)
Records: 24940 Duplicates: 0 Warnings: 0
~~ 中略 ~~
Query OK, 12609 rows affected (0.34 sec)
Records: 12609 Duplicates: 0 Warnings: 0
+----------------------+
| INFO |
+----------------------+
| LOADING dept_manager |
+----------------------+
1 row in set (0.00 sec)
Query OK, 24 rows affected (0.00 sec)
Records: 24 Duplicates: 0 Warnings: 0
+----------------+
| INFO |
+----------------+
| LOADING titles |
+----------------+
1 row in set (0.01 sec)
Query OK, 21707 rows affected (0.38 sec)
Records: 21707 Duplicates: 0 Warnings: 0
~~ 中略 ~~
Query OK, 15401 rows affected (0.26 sec)
Records: 15401 Duplicates: 0 Warnings: 0
+------------------+
| INFO |
+------------------+
| LOADING salaries |
+------------------+
1 row in set (0.00 sec)
Query OK, 25526 rows affected (0.42 sec)
Records: 25526 Duplicates: 0 Warnings: 0
~~ 中略 ~~
Query OK, 7671 rows affected (0.12 sec)
Records: 7671 Duplicates: 0 Warnings: 0
+---------------------+
| data_load_time_diff |
+---------------------+
| NULL |
+---------------------+
1 row in set (0.00 sec)
mysql>
MDS側でデータベースが作成されていることを確認します。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| employees |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
テーブルが作成されていることも確認します。mysql> use employees;
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>
mysql> show tables;
+----------------------+
| Tables_in_employees |
+----------------------+
| current_dept_emp |
| departments |
| dept_emp |
| dept_emp_latest_date |
| dept_manager |
| employees |
| salaries |
| titles |
+----------------------+
8 rows in set (0.00 sec)
mysql>
※検証中にレプリケーションで不整合が発生し、
データをインポートし直して
call sys.set_gtid_purged(“+gtidSet”)
を実行したのですがエラーとなり、”reset master”も権限不足で実行できないようです。
残念ながらこの場合はMDSを再構築する必要があるみたいですが、
今後の改善に期待してます!
まとめ
わりと簡単にAurora ⇒ MDSのレプリケーション設定を行うことができました。
他のMySQLベースのサービスについても別の機会にやってみようと思います。
<免責事項>
情報の掲載には注意を払っておりますが、掲載された情報の内容の正確性については一切保証しません。また、当サイトに掲載された情報を利用・使用(閲覧、投稿、外部での再利用など全てを含む)するなどの行為に関連して生じたあらゆる損害等につきましても、理由の如何に関わらず自己責任で行う必要があります。