Oracle Database Service for Azure(ODSA)で作成したMySQL HeatWaveにAzureから接続する

# はじめに
- Oracle Database Service for Azure(ODSA)でMySQL HeatWaveを作成する方法については以下の記事を参考にしてください。
[Oracle Database Service for Azure(ODSA)でOCI上にMySQL HeatWaveを作ってみる](https://qiita.com/mikoma/items/4b0982877d279f4a8bc7)

- MySQL HeatWaveエンドポイントには、MySQL Shell、MySQLクライアント、MySQL Workbenchやアプリケーションから接続できます。この記事ではAzure上に作成したVMからMySQL Shellを利用してMySQL HeatWaveに接続する方法をご紹介します。

- MySQL Shellについての詳細は以下を参考にしてください。
[MySQL Shellを使ってもっと楽をしよう！(YouTube)](https://youtu.be/F8NQFxRXv8A)

# 作業の流れ
以下の流れで行います。
1. Azure上にVMインスタンスを作成する
2. 作成したVMにMySQL Shellをインストールする
3. MySQL HeatWaveに接続する
4. MySQL HeatWaveにサンプルデータをインポートする


# 1. Azure上にVMインスタンスを作成する
Azureポータルから「Virtual Machines」をMySQL HeatWaveと同じVNET上に作成します。
ここではVMを作成する手順についてはご紹介しませんが、必要に応じて以下を参考にしていただければと思います。
[Azure での仮想マシン(ドキュメント)](https://learn.microsoft.com/ja-jp/azure/virtual-machines/)

:::note warn
VMのイメージは[MySQLがサポートしているプラットフォーム](https://www.mysql.com/jp/support/supportedplatforms/database.html)を選択してください。
:::

:::note info
ODSAではMySQL HeatWaveにアクセスするためのデフォルト・ポート(22,3306,33060)がオープンされているため、別途ポートを開ける必要はありません。
:::

![azure_vm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981366/ea0fc39b-2bff-1d77-1d2e-efd5dbfcb4d6.png)
![azure_vm_deploy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981366/86ec991c-0f0c-d0ae-4af2-d576756a9cec.png)

# 2. 作成したVMにMySQL Shellをインストールする
作成したVM上で以下のコマンドを実行し、yumリポジトリのセットアップ、MySQL Shellのインストールを行います。

```:yumリポジトリセットアップ
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
```

```:MySQL Shellインストール
sudo yum install mysql-shell
```
本記事ではOracle Linux8.5のVMにインストールを行っています。
利用するプラットフォームに応じて、インストール方法が変わる場合があります。インストール方法の詳細については以下を参照ください。
[MySQL Shell のインストール](https://dev.mysql.com/doc/mysql-shell/8.0/ja/mysql-shell-install.html)

# 3. MySQL HeatWaveに接続する
以下のコマンドを実行し、インストールしたMySQL Shellを利用してMySQL HeatWaveに接続します。
`mysqlsh --mysqlx -u <ユーザー名>　-h <エンドポイント>`
エンドポイントにはプライベートIPアドレス、またはFQDNを指定します。

以下の実行例では、MySQL HeatWaveに接続し「\sql」コマンドでSQL実行モードに変更後、SQLで現在のスキーマ一覧を確認しています。
![mysqlsh_connect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981366/35f928ff-9742-5bbf-f369-29cbaecdabec.png)

:::note info
MySQL ShellはJava Script(JS)モード、SQLモード、Python(PY)モードでMySQLに対する操作を行うことができるクライアントツールです。
:::

# 4. MySQL HeatWaveにサンプルデータをインポートする
現在ユーザーのデータは投入していない状態なので、サンプルデータとして約2GBの「airportdb」データベースを投入してみます。
以下のいずれかのコマンドを実行し、ロードする圧縮ファイル(約640MB)をダウンロード・解凍します。

```:tar.gz形式
wget https://downloads.mysql.com/docs/airport-db.tar.gz
tar xvzf airport-db.tar.gz
```

```:zip形式
wget https://downloads.mysql.com/docs/airport-db.zip
unzip airport-db.zip
```
解凍すると「airport-db」というフォルダが展開されますので、以下のようにMySQL ShellのloadDumpユーティリティを実行してデータをロードします。

```:airport-dbのロード
util.loadDump("airport-db", {threads: 16, deferTableIndexes: "all", ignoreVersion: true})
```

以下、実行例になります。（FQDNを指定してMySQL HeatWaveに接続しています）
![mysqlsh_loaddump.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981366/90819b71-afae-e19a-fc9c-970805a99bf5.png)
![airportdb_show.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981366/7e740d28-5c26-dec2-c7e4-f4ff56daf048.png)

最後に、heatwave_load(ストアドプロシージャ)を実行し、「airportdb」スキーマをHeatWaveクラスタに展開します。

```:HeatWaveクラスタに展開
CALL sys.heatwave_load(JSON_ARRAY('airportdb'), NULL);
```
以下、実行例になります。
![heatwave_load.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981366/41d86c9d-d79d-8e52-744c-cac618b6bc6f.png)
(中略)
![heatwave_load_finish.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981366/a97f73e2-df55-821f-49db-601175c23689.png)

以上でMySQL HeatWave接続〜データのロードまで完了しました！