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

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

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

https://qiita.com/yama6/items/b197c0fe3ec75eb02637

# 移行するサービス：Amazon Aurora MySQL

今回、移行対象とするのはAmazon Aurora MySQLです。
MySQL Shellを利用したDumpの作成と、Dumpファイルを元にしたOCI MySQL HeatWave Database Serviceの作成手順をガイドします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2325706/47777b1b-ee39-f515-19d3-e8072fbe0df7.png)


# 移行イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/30d65438-9da7-26af-7fa4-5da393f1c7ca.png)


# 前提条件
- AWSとOCI、それぞれに接続するための踏み台・作業用サーバがパブリックサブネット上に構築されていること
- 移行先のMySQL HeatWave Database Serviceは作成済みとすること

MySQL公式サイトにて案内されていた以下ドキュメント内の手順を参照しています。

https://www.mysql.com/jp/why-mysql/presentations/amazon-rds-aurora-mysql-heatwave-database-service-jp/

## 動作検証用データベース
本ブログでは、以下サンプルのemployees databaseを利用して移行前後のテーブル内容を確認します。

https://github.com/datacharmer/test_db

## Amazon Aurora MySQLでの動作確認結果
<details><summary>動作確認結果（長文のため折りたたみ）</summary><div>

```
$ mysql -h xxxxxx.cluster-xxxxxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 103
Server version: 5.7.12 MySQL Community Server (GPL)

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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| employees          |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

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> 
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 30;
+--------+------------+------------+-------------+--------+------------+
| 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 |
|  10011 | 1953-11-07 | Mary       | Sluis       | F      | 1990-01-22 |
|  10012 | 1960-10-04 | Patricio   | Bridgland   | M      | 1992-12-18 |
|  10013 | 1963-06-07 | Eberhardt  | Terkki      | M      | 1985-10-20 |
|  10014 | 1956-02-12 | Berni      | Genin       | M      | 1987-03-11 |
|  10015 | 1959-08-19 | Guoxiang   | Nooteboom   | M      | 1987-07-02 |
|  10016 | 1961-05-02 | Kazuhito   | Cappelletti | M      | 1995-01-27 |
|  10017 | 1958-07-06 | Cristinel  | Bouloucos   | F      | 1993-08-03 |
|  10018 | 1954-06-19 | Kazuhide   | Peha        | F      | 1987-04-03 |
|  10019 | 1953-01-23 | Lillian    | Haddadi     | M      | 1999-04-30 |
|  10020 | 1952-12-24 | Mayuko     | Warwick     | M      | 1991-01-26 |
|  10021 | 1960-02-20 | Ramzi      | Erde        | M      | 1988-02-10 |
|  10022 | 1952-07-08 | Shahaf     | Famili      | M      | 1995-08-22 |
|  10023 | 1953-09-29 | Bojan      | Montemayor  | F      | 1989-12-17 |
|  10024 | 1958-09-05 | Suzette    | Pettey      | F      | 1997-05-19 |
|  10025 | 1958-10-31 | Prasadram  | Heyers      | M      | 1987-08-17 |
|  10026 | 1953-04-03 | Yongqiao   | Berztiss    | M      | 1995-03-20 |
|  10027 | 1962-07-10 | Divier     | Reistad     | F      | 1989-07-07 |
|  10028 | 1963-11-26 | Domenick   | Tempesti    | M      | 1991-10-22 |
|  10029 | 1956-12-13 | Otmar      | Herbst      | M      | 1985-11-20 |
|  10030 | 1958-07-14 | Elvis      | Demeyer     | M      | 1994-02-17 |
+--------+------------+------------+-------------+--------+------------+
30 rows in set (0.00 sec)

mysql> select gender,count(*) from employees group by gender;
+--------+----------+
| gender | count(*) |
+--------+----------+
| M      |   179973 |
| F      |   120051 |
+--------+----------+
2 rows in set (0.13 sec)

mysql> show columns from employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int(11)       | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> exit
```

</div></details>

# 移行フロー

1. OCIのObject Storageに、Dumpファイル保存用バケットを作成
1. AWSの作業用EC2に、OCI接続用設定を実施
1. AWSの作業用EC2に、MySQL Shellをインストール
1. MySQL Shellを利用して、Aurora MySQLのDumpファイルを作成
1. OCIの作業用Computeに、OCI接続用設定を実施
1. MySQL Shellを利用して、MySQL HeatWave Database Serviceへのロードを実施



# 1. OCI Object Storage: Dumpファイル保存用バケットを作成
Dumpファイル保存用のバケットを作成します。

:::note info
既存でWork用バケットがあれば、手順2のAWS EC2に進んでください。
:::

OCIコンソール画面
→ 左上のハンバーガーメニュー
→ 「ストレージ」→ 「オブジェクト・ストレージとアーカイブ・ストレージ」→ 「バケット」を選択

「バケットの作成」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/9b9f952a-1bde-bba6-e938-b7a316d82a5b.png)

| 項目名 | 設定 |
|:-----------|------------|
| バケット名 | （任意のバケット名） |
| デフォルト・ストレージ層 | 標準 |
| 暗号化 | Oracle管理キーを使用した暗号化 |

その他、デフォルトのままで作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/3fa8adf9-3ccf-33c2-a32f-f9d2b3331a50.png)

バケットが作成された事を確認します。

# 2. AWSの作業用EC2に、OCI接続用設定を実施
EC2の作業ユーザーのホームディレクトリに、 **./.oci/config** ファイルを作成します。

:::note info
既に作成済みの場合は手順3に進んでください。
:::


## 2-1. OCIコンソールから、APIキーを作成
OCIコンソール画面
→ 「ユーザー設定」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/e3da84b0-01bb-d721-8716-19d5a36e14e8.png)

左下、リソースの「APIキー」→「APIキーの追加」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/e237f4eb-456f-c4a0-df9d-a085d86cbea1.png)

「秘密キーのダウンロード」を押下し、保存後に、「追加」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/dfdd5590-27cc-1e75-3c85-57339fdb318b.png)

構成ファイルのプレビューの内容をコピーします。
後で利用しますので、テキストエディタ等に保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/b24dd44d-c6ae-2be7-1121-49d14309654b.png)

## 2-2. 作業用EC2に、OCI構成ファイルを作成
作業用EC2にログインします。

ログイン後に、Touchコマンドで./.oci/config作成します。
```
touch ~/.oci/config
```

作成した **.oci/config** を編集します。
```
[DEFAULT]
user=(2-1でコピーした内容)
fingerprint=(2-1でコピーした内容)
tenancy=(2-1でコピーした内容)
region=(2-1でコピーした内容)
key_file=oci_api_key.pem
```
## 2-2. 作業用EC2に、OCI APIキーをアップロード
手順2-1でダウンロードした秘密キーをアップロードします。
- ファイル名: **oci_api_key.pem**とします。
- 保存先フォルダ: **~/.oci/** 

```
$ ls -l ~/.oci/
total 12
-rw------- 1 ubuntu ubuntu  301 Oct  1 08:26 config
-rw------- 1 ubuntu ubuntu 1704 Oct  1 08:26 oci_api_key.pem
$ 
```



# 3. AWSの作業用EC2に、MySQL Shellをインストール
:::note info
既にインストール済の場合は手順4に進んでください。
:::

以下公式の手順を参照してインストールします。
https://dev.mysql.com/doc/mysql-shell/8.0/ja/mysql-shell-install-linux-quick.html

インストール出来ていることを確認
```
$ mysqlsh --version
mysqlsh   Ver 8.0.34 for Linux on x86_64 - for MySQL 8.0.34 (MySQL Community Server (GPL))
$ 
```

# 4. EC2にて、MySQL Shellを利用して、Aurora MySQLのDumpファイルを作成

## 4-1. EC2にて、MySQL Shellを実行

```
$ mysqlsh

MySQL Shell 8.0.34

Copyright (c) 2016, 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 '\?' for help; '\quit' to exit.
```

## 4-2. MySQL Shellから、対象のAurora MySQLのエンドポイントに接続

```
 \connect Auroraのユーザ名@Auroraのエンドポイント
```

途中でAuroraユーザのパスワードを聞かれます。

```
 MySQL  JS > \connect xxxxxx@xxxxxxxxxxxxxx.xxxxxxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com

Creating a session to 'xxxxxx@xxxxxx.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com'
Please provide the password for 'xxxxxx@xxxxxx.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com': ********
Save password for 'xxxxxx@xxxxxx.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com'? [Y]es/[N]o/Ne[v]er (default No): Y
Fetching schema names for auto-completion... Press ^C to stop.
Your MySQL connection id is 319
Server version: 8.0.33 Source distribution
No default schema selected; type \use <schema> to set one.

 MySQL  xxxxxx.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306 ssl  JS > 
```

## 4-3. Aurora MySQLのDumpファイルをOCIのObject Storageに作成

以下のコマンドでDumpファイルを作成
```
> util.dumpInstance("outputurl", {osBucketName: "bucketname", osNamespace: "namespace", threads:1, consistent:false, ocimds: true, compatibility: ["strip_restricted_grants", "strip_definers"]})
```
| 項目 | 説明 |
|:-:|:-|
| outputurl | バケット直下に作成される親ディレクトリ名。任意でOK  |
| osBucketName | OCIで作成したObject Storageのバケット名を入力  |
| osNamespace | OCIテナントのNameSpace名を入力。OCIコンソールの右上人型アイコンのテナンシをクリックすることで、オブジェクト・ストレージ・ネームスペースが確認出来ます。  |
| threads | EC2のvCPU数を指定 |
| consistent | Instanceに対し、グローバル読み取りロックを設定のロックをします。AuroraのDumpを取得する際には、falseにする必要があります。 |
| ocimds | このオプションを true に設定すると、MySQL Database Service との互換性のチェックおよび変更が可能になります。 |
| compatibility | MySQL Database Service との互換性のために指定された要件を適用します。  |
| strip_restricted_grants | MySQL Database Service によって制限されている特定の権限を GRANT ステートメントから削除して、ユーザーおよびそのロールにこれらの権限を付与できないようにします  |
| strip_definers | ビュー、ルーチン、イベントおよびトリガーから DEFINER 句を削除して、これらのオブジェクトがデフォルト定義者 (スキーマを起動するユーザー) で作成されるようにし、ビューおよびルーチンの SQL SECURITY 句を変更して、DEFINER のかわりに INVOKER を指定します。 |

項目の詳細は以下公式サイトを参照してください。
https://dev.mysql.com/doc/mysql-shell/8.0/ja/mysql-shell-utilities-dump-instance-schema.html

実行結果
```
 MySQL  xxxxxx.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306 ssl  JS > util.dumpInstance("outputurl", {osBucketName: "bucketname", osNamespace: "namespace", threads:1, consistent: xfalse, ocimds: true, compatibility: ["strip_restricted_grants", "strip_definers"]})

Initializing - done 
1 out of 5 schemas will be dumped and within them 6 tables, 2 views.
2 out of 3 users will be dumped.
Gathering information - done 

(中略）

Dump duration: 00:00:05s                                                                      
Total duration: 00:00:07s                                                                     
Schemas dumped: 1                                                                             
Tables dumped: 6                                                                              
Uncompressed data size: 141.50 MB                                                             
Compressed data size: 36.82 MB                                                                
Compression ratio: 3.8                                                                        
Rows written: 3919015                                                                         
Bytes written: 36.82 MB                                                                       
Average uncompressed throughput: 25.96 MB/s                                                   
Average compressed throughput: 6.76 MB/s                                                      
MySQL  xxxxxx.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306 ssl  JS >
```

OCIのバケットに作成された事を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/0d05a2ae-869c-44ab-2c80-a60619395cdb.png)


# 5. OCIの作業用Computeに、OCI接続用設定を実施
OCIの作業ユーザーのホームディレクトリに、 **./.oci/config** ファイルを作成します。

:::note info
既に作成済みの場合は手順6に進んでください。
:::

:::note info
以下手順5-1,5-2は、手順2-1,2-2で実施した内容と全く同じ内容です。
作成するConfigファイル・APIキー共に全く同じ内容でOKです。（key-fileのPATHには注意）
:::


## 5-1. OCIコンソールから、APIキーを作成
OCIコンソール画面
→ 「ユーザー設定」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/e3da84b0-01bb-d721-8716-19d5a36e14e8.png)

左下、リソースの「APIキー」→「APIキーの追加」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/e237f4eb-456f-c4a0-df9d-a085d86cbea1.png)

「秘密キーのダウンロード」を押下し、保存後に、「追加」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/dfdd5590-27cc-1e75-3c85-57339fdb318b.png)

構成ファイルのプレビューの内容をコピーします。
後で利用しますので、テキストエディタ等に保存してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276568/b24dd44d-c6ae-2be7-1121-49d14309654b.png)

## 5-2. 作業用EC2に、OCI構成ファイルを作成
作業用EC2にログインします。

ログイン後に、Touchコマンドで./.oci/config作成します。
```
touch ~/.oci/config
```

作成した **.oci/config** を編集します。
```
[DEFAULT]
user=(5-1でコピーした内容)
fingerprint=(5-1でコピーした内容)
tenancy=(5-1でコピーした内容)
region=(5-1でコピーした内容)
key_file=oci_api_key.pem
```
## 5-2. 作業用EC2に、OCI APIキーをアップロード
手順5-1(2-1)でダウンロードした秘密キーをアップロードします。
- ファイル名: **oci_api_key.pem**とします。
- 保存先フォルダ: **~/.oci/** 

```
$ ls -l ~/.oci/
total 8
-rw-r--r--. 1 opc opc  298 Oct  6 07:50 config
-rw-r--r--. 1 opc opc 1704 Oct  6 07:39 oci_api_key.pem
$
```

# 6. Computeにて、MySQL Shellを利用して、MySQLへのロードを実施

## 6-1. Computeにて、MySQL Shellを実行

```
$ mysqlsh

MySQL Shell 8.0.34

Copyright (c) 2016, 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 '\?' for help; '\quit' to exit.
```

## 6-2. MySQL Shellから、MySQL Heatwave Database Serviceのエンドポイントに接続

```
 \connect <ユーザー名>@<MySQL Heatwave Database Serviceのエンドポイント>
```

途中でユーザのパスワードを聞かれます。

```
 MySQL  JS > \connect admin@xxxxxxxxxxxxxxx

Creating a session to 'admin@xxxxxxxxxxxxxx'
Fetching schema names for auto-completion... Press ^C to stop.
Your MySQL connection id is 23804
Server version: 8.0.34-u3-cloud MySQL Enterprise - Cloud
No default schema selected; type \use <schema> to set one.

MySQL  xxxxxxxxxxxx:3306 ssl  JS > 
```

## 6-3. MySQL HeatWave Database Serviceへのロードを実施

以下のコマンドでLoadを実施

```
> util.loadDump("<url>", {osBucketName: "<bucketname>", osNamespace: "<namespace>", threads:1})
```
| 項目 | 説明 |
|:-:|:-|
| url | Dumpファイルが保存されている親ディレクトリ名。手順4-3で指定したoutputurl。  |
| osBucketName | OCIで作成したObject Storageのバケット名を入力  |
| osNamespace | OCIテナントのNameSpace名を入力。OCIコンソールの右上人型アイコンのテナンシをクリックすることで、オブジェクト・ストレージ・ネームスペースが確認出来ます。  |
| threads | Computeの OCPU数を指定 |
| ignoreVersion | MySQLのバージョンに違いがある場合は、このオプションをTrueにします。（5.7 → 8.0にするときなど） |


項目の詳細は以下公式サイトを参照してください。

https://dev.mysql.com/doc/mysql-shell/8.0/ja/mysql-shell-utilities-load-dump.html

実行結果
```
 MySQL  10.0.0.240:3306 ssl  JS > util.loadDump("auroradump", {osBucketName: "mds_fromaws", osNamespace: "xxxxxxxxxxxxxx", threads:1, ignoreVersion:true})

Loading DDL and Data from OCI ObjectStorage bucket=mds_fromaws, prefix='auroradump' using 1 thread.
Opening dump...
Target is MySQL 8.0.34-u3-cloud (MySQL Database Service). Dump was produced from MySQL 5.7.12
WARNING: Destination MySQL version is newer than the one where the dump was created. Loading dumps from different major MySQL versions is not fully supported and may not work. The 'ignoreVersion' option is enabled, so loading anyway.
Fetching dump data from remote location...

(中略）

Starting data load
100% (141.50 MB / 141.50 MB), 4.13 MB/s, 5 / 6 tables done                
Recreating indexes - done                                 
Executing common postamble SQL
6 chunks (3.92M rows, 141.50 MB) for 6 tables in 1 schemas were loaded in 33 sec (avg throughput 4.42 MB/s)
0 warnings were reported during the load.                 
 MySQL  10.0.0.240:3306 ssl  JS > 
 
```


# 動作確認
MySQL HeatWave Database Serviceのエンドポイントにログインし、動作確認をします。

<details><summary>動作確認結果（長文のため折りたたみ）</summary><div>

```
$ mysql -h 10.0.0.240 -u admin -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 23822
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> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| employees          |
| information_schema |
| mysql              |
| mysql_audit        |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

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.01 sec)

mysql> select * from employees limit 30;
+--------+------------+------------+-------------+--------+------------+
| 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 |
|  10011 | 1953-11-07 | Mary       | Sluis       | F      | 1990-01-22 |
|  10012 | 1960-10-04 | Patricio   | Bridgland   | M      | 1992-12-18 |
|  10013 | 1963-06-07 | Eberhardt  | Terkki      | M      | 1985-10-20 |
|  10014 | 1956-02-12 | Berni      | Genin       | M      | 1987-03-11 |
|  10015 | 1959-08-19 | Guoxiang   | Nooteboom   | M      | 1987-07-02 |
|  10016 | 1961-05-02 | Kazuhito   | Cappelletti | M      | 1995-01-27 |
|  10017 | 1958-07-06 | Cristinel  | Bouloucos   | F      | 1993-08-03 |
|  10018 | 1954-06-19 | Kazuhide   | Peha        | F      | 1987-04-03 |
|  10019 | 1953-01-23 | Lillian    | Haddadi     | M      | 1999-04-30 |
|  10020 | 1952-12-24 | Mayuko     | Warwick     | M      | 1991-01-26 |
|  10021 | 1960-02-20 | Ramzi      | Erde        | M      | 1988-02-10 |
|  10022 | 1952-07-08 | Shahaf     | Famili      | M      | 1995-08-22 |
|  10023 | 1953-09-29 | Bojan      | Montemayor  | F      | 1989-12-17 |
|  10024 | 1958-09-05 | Suzette    | Pettey      | F      | 1997-05-19 |
|  10025 | 1958-10-31 | Prasadram  | Heyers      | M      | 1987-08-17 |
|  10026 | 1953-04-03 | Yongqiao   | Berztiss    | M      | 1995-03-20 |
|  10027 | 1962-07-10 | Divier     | Reistad     | F      | 1989-07-07 |
|  10028 | 1963-11-26 | Domenick   | Tempesti    | M      | 1991-10-22 |
|  10029 | 1956-12-13 | Otmar      | Herbst      | M      | 1985-11-20 |
|  10030 | 1958-07-14 | Elvis      | Demeyer     | M      | 1994-02-17 |
+--------+------------+------------+-------------+--------+------------+
30 rows in set (0.00 sec)

mysql> select gender,count(*) from employees group by gender;
+--------+----------+
| gender | count(*) |
+--------+----------+
| M      |   179973 |
| F      |   120051 |
+--------+----------+
2 rows in set (0.19 sec)

mysql> show columns from employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
```

</div></details>

# まとめ
MySQL Shellを利用して簡単に移行することができました。
Amazon EC2や、OCI Computeから、OCI Object Storageにつなぐ設定は慣れるまで時間がかかるかもしれません。

Auroraに対し、MySQL Shellによるdumpを実施する際には、グローバル読み取りロックをすることが出来ないため、dump取得時にはアプリケーション側で更新処理が入らないようにする必要がありそうです。