[OCI] MySQL Database Service(MDS) を初めて使ってみる

# はじめに

実はこれまで MySQL Databese を使ったことがありません。昔々 Oracle Database を使ってアプリ開発をしたことがあるので、データベースを少し触ってテストデータを作成したり、JDBCドライバーを設定したり、SQLでデータ呼び出したりした経験はありますが、データベースは全くもって詳しくないです。

この度OCIで提供されたMySQL Database Service(以後 MDS) はPaaSでのサービス提供なので構築も簡単そうです。MDSの勉強も兼ねて環境構築して使ってみたいと思います。



# 構築環境および前提

- MDSはOCIのプライベート・サブネットに構築します。
- MDSへはパブリック・サブネットの踏み台サーバーから接続を試みます。踏み台サーバーは既に構成済みのものを使用します。
- 仮想クラウド・ネットワーク(VCN)も既存設定済みのものを使用します。
![image-20210819101455115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/3fc65817-f767-e45d-a3d4-2db4431bc12d.png)

# 1. MDSの作成

OCIにサインイン後、左上のナビゲーションメニューから[データベース]-[MySQL]を選択し、**MySQL DBシステムの作成** をクリックします。

![image-20210817105353920.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/716766ae-aeaa-42e8-ad7a-2312be9c4a15.png)
作成に必要な情報を入力していきます。
![image-20210817112032757.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/af9998b1-5bdd-1110-de0b-420b23bca821.png)
**[コンパートメントに作成]** 任意のコンパートメントを指定します。
**[名前]** 任意の名前を指定します。例）mysql01
**[スタンドアロン]** を選択。今回は単体のMDSを作成します。

続けて、
![image-20210819103154875.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/e74fd30b-69b9-819e-f78a-a2a0a06be78d.png)
管理者資格証明の作成
**[ユーザー名]** root とします。
**[パスワード]** 任意のパスワードを指定します。

ネットワーキングの構成
**[仮想クラウド・ネットワーク]** 既存の仮想クラウド・ネットワークを選択。例）osaka-vcn
**[サブネット]** プライベート・サブネットを選択します。

![image-20210817113058257.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/864cba90-239b-95c0-9125-c5836e3db61e.png)
配置の構成
**[フォルト・ドメインの選択]** 任意のフォルト・ドメインを選択します。

ハードウェアの構成
**[シェイプの選択]** 希望するシェイプに変更します。単にテスト用途なのでデフォルトの最小構成のままとします。
**[データ・ストレージ・サイズ(GB)]** こちらもデフォルト値のままとします。 

![image-20210817113232892.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/c975f4a9-f81a-6308-d515-1bbcb7c83840.png)
バックアップ・プランの構成
**[自動バックアップの有効化]** 有効化のまま。他の設定もデフォルトのままとします。
**作成** ボタンをクリックして、MDSを作成します。

しばらくすると、MDSが作成されました。
![image-20210817113513728.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/9e203585-368f-e1db-f342-d49df467a404.png)
ページ左下のリソースにて、**エンドポイント**をクリックして、作成されたMDSのエンドポイントを確認しておきます。これらの値は後段のセキュリティリストの設定やMDSへの接続に使用します。
![image-20210817105559197.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/dd865676-294b-af91-a77a-3f3753b61e34.png)

# 2. セキュリティリストの設定
MDSに接続するためには仮想クラウド・ネットワークのセキュリティ・リストのイングレス・ルールでMDSと通信するための TCP/IP 3306ポートの通信を許可しておく必要があります。

ナビゲーションメニューから[ネットワーキング]-[仮想クラウド・ネットワーク]を選択し、作成済みの仮想クラウド・ネットワーク(例）osaka-vcn)をクリックします。
![image-20210817105611494.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/27259d7f-a016-05ec-4e92-5225f043077e.png)
ページ左下のリソースにて、**セキュリティ・リスト**をクリックして、プライベート・サブネットのセキュリティ・リストをクリックします。続けて**イングエス・ルールの追加**をクリックします。
![image-20210817105632284.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/0112f869-f20f-667a-2b1a-70d972979cd8.png)
**イングレス・ルール**を追加します。
![image-20210817105639841.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/5dc29185-9207-8b5b-f2bd-d2b21e75ab90.png)
仮想クラウド・ネットワーク(osaka-vcn)からポート3306(MDS) への接続を許可します。
**[ソースCIDR]** 192.168.0.0/16 と入力します。
**[宛先ポート範囲]** 3306 MDSのポートを指定します。

イングレス・ルールが追加されました。
![image-20210817105653442.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/658a4231-84c6-6d85-0d22-3e92d3df5d4e.png)

# 3. MySQLクライアントのインストール
既に作成している踏み台サーバーからMDSへの接続を試みるため、踏み台サーバーにMySQLクライアントをインストールします。踏み台サーバーの設定については、以下が参考になるかもしれません。

[OCI] 踏み台サーバーからSSHでプライベート・サブネットのインスタンスへの接続と、NATゲートウェイを試してみる
https://qiita.com/cocotaro0202/items/7b115b108bb9f03b90a6

踏み台サーバーの起動とパブリックIPアドレスを確認し、Windows PowerShell 及び Tera Term などのターミナルから踏み台サーバーに接続します。

```
ssh -i ~/.ssh/id_rsa opc@168.138.XXX.XXX
```

踏み台サーバーで次のコマンド操作を実行して、MySQLクライアントをインストールします。

```
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum install mysql
```

詳細は、巻末の参考URL「その9 - クラウドでMySQL Databaseを使う」4.MySQLクライアントのインストールもご覧ください。

# 4. MDSへの接続確認
踏み台サーバーでMySQLクライアントのインストールが完了したので、踏み台サーバーからMDSへの接続を試みます。MDSを作成した時のユーザー名、エンドポイントのホスト名を指定します。

- ユーザー名：root
- ホスト名：例）TestMDS.sub03060550521.osakavcn.oraclevcn.com

```
mysql -u root -p -h TestMDS.sub03060550521.osakavcn.oraclevcn.com 
```

MDS作成時に指定したパスワードを入力し、その後 mysql プロンプトが表示され、無事MDSへの接続に成功することができました。
![image-20210819131929003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/f13ea63f-aedc-6173-2f88-2bae684f487a.png)
MDSへの接続は以上で完了ですが、データも入れてSQLを実行したいので、巻末の参考URLの書籍に添付されたいたサンプルデータを投入してみます。

```
mysql -u root -p -h TestMDS.sub03060550521.osakavcn.oraclevcn.com < term3.sql
```
データベース一覧を参照すると、サンプルデータベース(term03db)が投入されたことが確認できました。
![image-20210819133328333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/4523b67e-b545-faed-9315-c5394c0077e2.png)
さらにサンプルデータベースを選択し、テーブル一覧を表示します。
※ stations テーブルはJRの駅名情報を格納しているテーブルです。
![image-20210819133811297.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/17e047ca-e714-aa63-6f29-7b375643e4e2.png)
あとは適当に SELECT 文を発行してサンプルデータを参照できたので、MDSの動作確認としては以上で終了とします。
![image-20210819134220673.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/cd1cff7b-0764-be6e-caf3-60296c018a42.png)

MySQL初心者にも簡単にMDSを構成し使用することができました。最近MDSでは高可用性機能がリリースされたので、継続してこれらも試せたらと思います。

# 参考URL
[その9 - クラウドでMySQL Databaseを使う](https://oracle-japan.github.io/ocitutorials/beginners/creating-mds/)
[書籍：15時間でわかるMySQL集中講座](https://www.amazon.co.jp/15%E6%99%82%E9%96%93%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-MySQL%E9%9B%86%E4%B8%AD%E8%AC%9B%E5%BA%A7-%E9%A6%AC%E5%A0%B4-%E4%BF%8A%E5%BD%B0-ebook/dp/B07YNB6QLJ)