LoginSignup
4
2

【OCI クラウド移行ガイド】 Amazon Aurora を MySQL HeatWave Database Serviceへ移行してみた~Replication Channel 編~

Last updated at Posted at 2023-09-29

OCIクラウド移行ガイドとは

オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニア(@araidon,@kazunishi,@yama6)による、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。

移行したいサンプルワークロード

日々の業務でよく目にするサービスを中心に、サンプルワークロードとしてまとめてみました。このシリーズでは、主にAWSからの移行を取り上げます。
このワークロードは、ユーザがログインして、Web上で写真を共有するWebサービスをイメージしています。
image.png

移行するサービス:Amazon Aurora for MySQL

今回、移行対象とするのはAmazon Aurora for MySQLです。
MySQL HeatWave Database ServiceのReplication Channel機能を利用した移行手順をガイドします。
image.png

移行のイメージ

image.png

今回は、AuroraとMDSとレプリケーションを貼り、Aurora側で行った変更が自動的にMDSに反映されるかの移行検証をしてみたいと思います。
移行にあたり、発生元のサーバー (ソース) でコミットされた各トランザクションに作成および関連付けられる一意の識別子であるGTID(グローバルトランザクション識別子)の設定、変更内容をバイナリログファイルに行形式で保存するbinlog_formatをAuroraのパラメータグループで設定します。

MySQL 8.0 リファレンスマニュアル 17.1.3.1 GTID 形式および格納
https://dev.mysql.com/doc/refman/8.0/ja/replication-gtids-concepts.html

MySQL 8.0 リファレンスマニュアル 5.4.4.2 バイナリログ形式の設定
https://dev.mysql.com/doc/refman/8.0/ja/binary-log-setting.html

移行の仕組については、下記の情報を参考にしました。
高可用性・性能がアップデート!MySQL HeatWave最新情報
https://www.mysql.com/jp/news-and-events/web-seminars/mysql-heatwave-tech-updates-enhancements-in-ha-and-performance/

今回行う移行方式は、本資料のInbound Replicationに該当します。
image.png

前提条件

AWSとOCIがVPN接続されていること、Aurora,MDSそれぞれに接続するための踏み台サーバがパブリックサブネット上に構築されていることが前提条件です。
(OCIとAWSのVPN接続手順については、後日、別の記事で解説します。)
接続手順は下記の記事を参考にしてください。

移行手順

  1. Auroraの作成
  2. MDSの作成
  3. Aurora--->MDS:レプリケーションの検証

1. Auroraの作成

AWS側でAuroraを作成します。

1-1. Aurora:パラメータグループの作成

まずはパラメータグループにて、行ベースのレプリケーションを有効化、GTIDの有効化していきます。
RDS>パラメータグループ から、パラメータグループを作成します。
image.png
今回は、移行元のAuroraのMySQLのメジャーバージョンは8.0とします。
DB Cluster Parameter Groupを設定すると、クラスタに紐づくDBすべてに同じパラメータが設定されます。

1-2. Aurora:パラメータグループの編集

作成後、編集ボタンから編集画面に遷移し、パラメータを変更します。
変更するパラメータは下記5つです。

パラメータ
binlog_format ROW
gtid-mode ON
enforce_gtid_consistency ON
character_set_database utf8mb4
character_set_server utf8mb4

MDSにおけるキャラクタセットのデフォルトはutf8mb4なので、こちらも変更します。
「パラメータをフィルタリング」の検索欄に上記パラメータ名を入れ、値を入力し、「変更を保存」を押下します。
image.png

1-3. Aurora:DBの作成

RDS>データベースから、「データベースの作成」ボタンを押下します。
必要な設定箇所は下記の通りです。

設定項目
データベース作成方法を選択 標準作成
エンジンのタイプ Aurora (MySQL Compatible)
利用可能なバージョン 8.0.mysql_aurora.3.04.0
テンプレート 本番稼働用
DB クラスター識別子 任意の値
マスターパスワード 任意の値
インスタンスの設定 バースト可能クラス (t クラスを含む)
インスタンスタイプ 任意のもの
マルチ AZ 配置 Aurora レプリカを作成しない
コンピューティングリソース EC2 コンピューティングリソースに接続しない
ネットワークタイプ IPv4
Virtual Private Cloud (VPC) VPN接続を設定したVPC
DB クラスター識別子 任意の値
VPC セキュリティグループ VPN接続を設定したセキュリティグループ
追加設定 データベースの選択肢
最初のデータベース名 任意の値
DB クラスターのパラメータグループ 作成したパラメータグループを選択
設定画面  👇
image.png image.png
image.png image.png
image.png image.png

データベースの作成ボタンを押下し、ステータスが利用可能になるまで待ちます。

1-4. Aurora:DBへの接続

利用可能のステータスが確認できたら、ライターのエンドポイントをコピーします。
image.png
下記のコマンドで、エンドポイントに対して接続します。
今回は、mysql ClientをインストールしたEC2からmysql接続を行っています。

[ec2-user@ip-10-1-3-181 ~]$ mysql -u admin -p -h test-cluster-1-instance-1.cn07mhl9cm4v.ap-northeast-1.rds.amazonaws.com
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1900
Server version: 8.0.28 Source distribution

Copyright (c) 2000, 2023, 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.

1-5. Aurora:レプリケーションユーザの準備

このあと作成するMDSにて、チャネルを作成して、Auroraとレプリケーションを行います。その際にソースDB(今回は移行元のAurora)からレプリケーションユーザを提供する必要があります。ユーザを作成し、権限を設定します。

mysql> CREATE USER repluser@'%' IDENTIFIED BY '任意パスワード';
mysql> GRANT REPLICATION SLAVE on *.* to repluser@'%';

任意パスワードには、大文字小文字の英字、数字、記号を含めてください。
AWS側では怒られませんが、OCI側のパスワードポリシーが、8文字から32文字までの長さで、大文字、小文字、数字および特殊文字をそれぞれ1つ以上含める必要があるため、のちに怒られます。

1-6. Aurora:GTIDの確認

後に必要となる、GTIDを確認します。

mysql> show global variables like 'GTID%';

表示されたGTIDをコピーしてメモしておきます。

+----------------------------------+--------------------------------------------+
| Variable_name | Value |
+----------------------------------+--------------------------------------------+
| gtid_executed  | <<この部分をコピー>> |
| gtid_executed_compression_period | 1000 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | コピー部分と同値:X-XX |
+----------------------------------+--------------------------------------------+
5 rows in set (0.03 sec)

ここまでで、Aurora側の設定は一旦完了です。

2. MDSの作成

次にOCI側でMDS(MySQL HeatWave Database Service)を作成します。

2-1. MDS:DBの作成

データベース>MySQL HeatWave>DBシステムを選択し、DBシステム作成画面に遷移します。DBシステムの作成ボタンを押下します。
必要な設定箇所は下記の通りです。

設定項目
本番 <選択>
DBシステム情報の指定
コンパートメントに作成 任意のコンパートメント
名前 任意の値
スタンドアロン <選択>
MySQL HeatWaveの構成 <選択しない>
管理者資格証明の作成
ユーザー名 admin
パスワード 任意の値
ネットワーキングの構成
仮想クラウド・ネットワーク VPN接続を設定したVCN
サブネット VPN接続を設定したサブネット
ハードウェアの構成
シェイプの選択 MySQL.VM.Standard.E4.1.8GB(任意) *1
データ・ストレージ・サイズ(GB) 50GB(任意)
拡張オプションの表示 *2
構成タブ
MySQLバージョン 8.0.34
接続タブ
ホスト名 任意の値
設定画面  👇
image.png image.png 
image.png image.png
image.png image.png

*1:シェイプの選択>シェイプの変更ボタンから変更できます。
*2:拡張オプションの表示ボタンを押下してください。

設定項目が入力できたら、作成ボタンを押下してください。

2-2. MDS:DBへの接続

アクティブのステータスが確認できたら、エンドポイントをコピーします。
エンドポイントは、DBシステムの詳細画面から、リソース>エンドポイントのラベルを押下すると確認できます。
image.png
※ホスト名がエンドポイントになります。

下記のコマンドで、エンドポイントに対して接続します。
mysql ClientをインストールしたCompute VMからmysql接続を行っています。

[opc@test-instance ~]$ mysql --host testmds.testprisubnet.testvcn.oraclevcn.com -u admin -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 480
Server version: 8.0.34-u3-cloud MySQL Enterprise - Cloud

Copyright (c) 2000, 2023, 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> 

2-3. GTIDの設定

まずはMDS側でGTIDを確認します。下記コマンドを実行してください。

mysql> show global variables like 'GTID%';

先ほどAurora側で確認できたgtid_executedの値が空になっていることが確認できます。
ここに、さきほどメモを残したAuroraのGTIDを設定します。

mysql> call sys.set_gtid_purged("<<コピーしたGTID>>");

再度、GTIDの確認コマンドを実行します。

mysql> show global variables like 'GTID%';
+----------------------------------+--------------------------------------------+
| Variable_name | Value |
+----------------------------------+--------------------------------------------+
| gtid_executed | <<設定したGTID>> |
| gtid_executed_compression_period | 0 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | <<設定したGTID>> |
+----------------------------------+--------------------------------------------+
5 rows in set (0.00 sec)

先述した通り、このGTIDを両方のDBに持たせて、Aurora (ソース) でコミットされた各トランザクションをMDS(ターゲット)に反映し、レプリケーションを実現します。

2-4. MDS:Replication Channelの作成

Replication Channelは、DBシステムの詳細画面から、リソース>チャネルのラベルを押下して作成します。

image.png
image.png

ソース接続のフィールドに、「1-5. Aurora:レプリケーションユーザの準備」 で作成したレプリケーションユーザの情報を入力します。

設定項目
ホスト名 Auroraのライターエンドポイント名
ユーザ名 レプリケーションユーザ名
パスワード 設定した任意の値
SSLモード 無効
レプリケーションのポジショニング ソースで、GTID自動ポジショニングを使用できます(推奨)

チャネルの作成ボタンを押下します。

ステータスが作成中からアクティブになれば成功です。
image.png

※「注意が必要」となる場合は、作成に失敗しています。下記リファレンスを参照して、設定を確認してください。

3. Aurora--->MDS:レプリケーションの検証

AuroraでDBを構築し、それらがMDSで反映されるか確認します。
テストデータは、GitHubの下記データを利用します。

3-1. EC2:Gitのインストール

下記コマンドを実行します。

[ec2-user@ip-10-1-3-181 ~]$sudo yum install git-all
---略---
[ec2-user@ip-10-1-3-181 ~]$ git -v
git version 2.40.1

3-2. EC2:テストデータの準備

下記コマンドを実行し、test_dbディレクトリにテストデータを準備します。

[ec2-user@ip-10-1-3-181 ~]$git clone https://github.com/datacharmer/test_db

さらに、test_dbディレクトリに移動します。

[ec2-user@ip-10-1-3-181 ~]$ cd test_db
[ec2-user@ip-10-1-3-181 ~]$ cd test_db
[ec2-user@ip-10-1-3-181 test_db]$ ls
Changelog  employees.sql              employees_partitioned_5.1.sql  load_departments.dump  load_dept_manager.dump  load_salaries1.dump  load_salaries3.dump  objects.sql  show_elapsed.sql  test_employees_md5.sql  test_versions.sh
README.md  employees_partitioned.sql  images                         load_dept_emp.dump     load_employees.dump     load_salaries2.dump  load_titles.dump     sakila       sql_test.sh       test_employees_sha.sql
[ec2-user@ip-10-1-3-181 test_db]$ 

テストデータがクローンされたことが確認できました。

3-3. Aurora:テストデータの投入

まず、踏み台のEC2からAuroraに接続します。

[ec2-user@ip-10-1-3-181 test_db]$ mysql -u admin -p -h test-cluster-1.cluster-cn07mhl9cm4v.ap-northeast-1.rds.amazonaws.com
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3908
Server version: 8.0.28 Source distribution

Copyright (c) 2000, 2023, 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> 

sourceコマンドを実行し、test_dbディレクトリにクローンした SQL スクリプトファイルを実行します。このコマンドにより、employeesというDBが構築されます。

その前に、Aurora、MDSでそれぞれの初期状態を確認しておきましょう。

Aurora

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_aurora        |
+--------------------+
5 rows in set (0.00 sec)

MDS

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mysql_audit        |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

当然ですが、それぞれのDBにて、employeesというDBは作られていません。
では、テストデータを投入します。Auroraにて、下記コマンドを実行してください。

Aurora

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.04 sec)
~略~

3-4. 実行結果の確認

MDS側に結果が反映されたか確認してみます。

MDS

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| employees          |
| information_schema |
| mysql              |
| mysql_audit        |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

employeesというDatabaseが追加されたことが確認できました!
中身を見てみましょう。

MDS

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> 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> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.00 sec)

Auroraでも同様にemployeesテーブル内のデータも確認します。

Aurora

mysql> use employees;
Database changed
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> select * from employees limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
|  10002 | 1964-06-02 | Bezalel    | Simmel    | F      | 1985-11-21 |
|  10003 | 1959-12-03 | Parto      | Bamford   | M      | 1986-08-28 |
|  10004 | 1954-05-01 | Chirstian  | Koblick   | M      | 1986-12-01 |
|  10005 | 1955-01-21 | Kyoichi    | Maliniak  | M      | 1989-09-12 |
|  10006 | 1953-04-20 | Anneke     | Preusig   | F      | 1989-06-02 |
|  10007 | 1957-05-23 | Tzvetan    | Zielinski | F      | 1989-02-10 |
|  10008 | 1958-02-19 | Saniya     | Kalloufi  | M      | 1994-09-15 |
|  10009 | 1952-04-19 | Sumant     | Peac      | F      | 1985-02-18 |
|  10010 | 1963-06-01 | Duangkaew  | Piveteau  | F      | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.00 sec)

実行結果比較

Aurora MDS
image.png image.png

まとめ

このあと、試しにAurora側で作成したDBを削除したところ、MDS側でも即時に変更が反映されていました。
結果、AuroraからMDSの移行はReplication Channelで実現することができました。
次回は、Aurora Serverlessからの移行を試してみたいと思います。

4
2
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
4
2