Oracle MySQL Database Serviceのインスタンスを作ってMySQL Workbenchから接続してみた

- Oracle MySQL Database Serviceの使い方メモ〜その1
- Oracle MySQL Database Serviceインスタンス作成とサービスコンソールの操作
- Oracle MySQL Database Serviceインスタンスへの接続方法 (MySQL Shell, MySQL Client, MySQL Workbench)

# はじめに
Oracle Cloud Infrastructure (OCI) でマネージドサービスとして利用可能なOracle MySQL Database Serviceの環境構築から基本操作、OCI上の踏台サーバ上で稼働するクライアントツールからの接続を試します。その後、統合ビジュアルツールであるMySQL Workbenchをクライアント環境にインストールして接続できることを確認しました。

# 検証環境 
- MySQLバージョン : 8.0.22-u2-cloud (Oracle MySQL Database Service)
- Oracle-Linux-8.2-2020.11.10-0 (OCI Compute VM) : Bastion (踏台) サーバとして利用
- MySQL Shell 8.0.22 : Bastionサーバ上で利用
- MySQL Ver 8.0.21 for Linux on x86_64  (Source distribution) : Bastionサーバ上のMySQL Clientとして利用
- macOS 10.15.7 Catalina : クライアント環境
- MySQL Workbench 8.0 Version 8.0.22 : クライアント上にインストール

# Oracle MySQL Database Serviceのインスタンスの構築
## OCI上のネットワークの構成
Oracle MySQL Database Serviceインスタンスはプライベート・エンドポイントしか持たないため、プライベート・サブネット上に構築する必要があります。また、OCI外部からのプライベート・エンドポイントへの接続には閉域網接続 (FastConnect - Private Peering) または、インターネットVPN (IPSec) が必要となるため、インターネット経由で接続ができるようにパブリック・サブネット上にBastionサーバを構築します。VCNを新規作成する場合は、**インターネット接続性を持つVCN作成**ウィザードの利用が便利です。既存のVCNを利用する場合は、Bastionサーバが稼働するパブリック・サブネットとOracle MySQL Database Serviceインスタンスが稼働するプライベート・サブネットをそれぞれ1つずつ作成してください。下記は新規VCNを作る場合の作業について記します。


### インターネット接続性を持つVCN作成ウィザード
OCIダッシュボードにログインし、OCIダッシュボードメニューから、**コア・インフラストラクチャ**>**ネットワーキング**>**概要**にアクセスし、画面中央の 「インターネット接続性を持つVCN作成」の「VCNウィザードの起動」を選択してください。
![20-11-15-00-03-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/941a2cda-fc7f-6efd-3bdd-16adc852ad4b.png)


下記にウィザード内の入力例を記します。
* 基本情報
    * VCN名 : 任意のVCN名　MySQLTest
    * コンパートメント : 任意のコンパートメント名　 /dev
* VCNとサブネットの構成
    * VCN CIDRブロック 10.0.0.0/16
    * パブリック・サブネットCIDRブロック　10.0.30.0/24
    * プライベート・サブネットCIDRブロック　10.0.31/0/24
    * DNS解決：(任意) 選択

ウィザードの全項目を入力し、VCNの関連するリソースの作成が終われば、下記の図のような構成のネットワークが作成されます。
![20-11-15-00-23-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/4df5d23d-7340-50fe-97c1-4445df88d34d.png)


### セキュリティ・ルールの変更
パブリック・サブネットに配置するBastionサーバからプライベート・サブネットのOracle MySQL Database Serviceインスタンスはプライベート・エンドポイントにアクセスできるようにプライベート・サブネットのセキュリティ・ルールに3306および33060ポートの通信を許可するよう設定を追記します。(2020年11月時点ではセキュリティ・グループには対応していません) 

OCIダッシュボードメニューから、**コア・インフラストラクチャ**>**ネットワーキング**>**仮想クラウド・ネットワーク**にアクセスし、作成したVCN (本記事内ではMySQLTest) を選択、画面左下のリソースメニューより**セキュリティ・リスト**を選択、セキュリティ・リストの一覧より**プライベート・サブネット-*VCN名*のセキュリティ・リスト**を選択、**画面中央のイングレス・ルールの追加**ボタンをクリックし、下記の設定を追記してください。

---
|ステートレス|ソース・タイプ|ソースCIDR|IPプロトコル|ソース・ポート範囲|宛先ポート範囲|
|---|---|---|---|---|---|
|いいえ|CIDR|10.30.0.0/16|TCP|All|3306|
|いいえ|CIDR|10.30.0.0/16|TCP|All|33060|
---

## OCI IAMのポリシーの追加
[マニュアル](https://docs.cloud.oracle.com/en-us/iaas/mysql-database/doc/policy-details-mysql-database-service.html#GUID-CE981948-6203-4366-A5F9-DB1746055531)を参考にOracle MySQL Database Serviceを利用するために必要なポリシーを設定します。

```
Allow group <グループ名> to manage mysql-family in compartment <コンパートメント名>
Allow service mysql to use all-resources in compartment <コンパートメント名>
```

筆者の環境では開発環境用に */dev* コンパートメントと開発用のグループである*Developers*が作成済で、*Developers*グループにはOracle MySQL Database Serviceを利用するIAMユーザーが追加されています。この様な環境で上記ポリシーは下記の様に書くことができます。

```
Allow group Developers to manage mysql-family in compartment dev
Allow service mysql to use all-resources in compartment dev
```

ポリシーの記載方法については、こちらの活用資料が参考になります。
[Oracle Cloud Infrastructure 活用資料集 IDおよびアクセス管理 (IAM) 概要](https://oracle-japan.github.io/ocidocs/services/governance%20and%20administration/iam-100/)

## Oracle MySQL Database Serviceインスタンスの作成
OCIダッシュボードメニューから、**データベース**>**MySQL**にアクセスします。
![20-11-15-01-14-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/00aaf38b-0cee-7d9b-11ac-97be5bb28828.png)

MySQL Databaseシステムの作成ボタンを押したいところですが、その前に画面左のリスト範囲メニューに表示されたコンパートメントのセレクタメニューより先程ポリシーを設定したコンパートメントに切り替えることを忘れないでください。それでは、**MySQL Databaseシステムの作成**ボタンを押してインスタンスの作成ウィザードを開始します。
![20-11-15-01-16-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/aeca6065-511f-5623-b82b-2487b561fcbb.png)

ウィザード内の入力例を下記に示します。

* DBシステムの基本情報の指定
    * コンパートメントの選択 : 任意のコンパートメント名　 /dev　
    * DBシステムの名前　: 任意名前　mysqltest
    * 説明 : コメント記入
    * 可用性ドメインの選択　：デフォルト　Fubk:AP-TOKYO-1-AD-1
    * フォルト・ドメインの選択　：デフォルト FAULT-DOMAIN-1
    * シェイプの選択：デフォルト　 VM.Standard.E2.1
    * データ・ストレージ・サイズ(GB) : 最小50GB
    * メンテナンス・ウィンドウの開始時間 :  Sunday 18:00 (UTCで入力)

* 管理者資格証明の作成
    * ユーザー名  MuSQL管理ユーザー名
    * パスワード　MySQL管理者パスワード
    > 管理者パスワードは8文字から32文字までの長さで、大文字、小文字、数字および特殊文字をそれぞれ1つ以上含める必要があります
* ネットワーク情報の指定
    * (コンパート名)の仮想クラウド・ネットワーク : VCNを作成したコンパート名を指定後、事前作成したVCN名入力
    * (コンパート名)のサブネット : サブネットを作成したコンパートを指定後、事前作成したプライベート・サブネット名を入力
    * ホスト名: 任意のホスト名　mysqldb
    * MYSQLポート : 3306 
    * MYSQL Xプロトコル・ポート:　33060 

* DBシステム・バックアップの基本情報の指定：今回は利用しない
    * 自動バックアップの有効化 : 指定なし
    * バックアップ保有期間 (日数) : 指定なし
    * バックアップ・ウィンドウの開始時間  デフォルト・バックアップ・ウィンドウ / バックアップ選択ウィンドウ : 指定なし
    * バックアップ・ウィンドウの開始時間指定 : 指定なし


## Bastionサーバ用のCompute VMインスタンスの作成

OCIダッシュボードメニューから、**コア・インフラストラクチャ**>**コンピュート**>**インスタンス**にアクセスします。**インスタンスの作成**ボタンを押してComputeインスタンスの作成ウィザードを開始します。
ウィザード内の入力例を下記に示します。


* 名前　: 任意名前　Bastion
* コンパートメントの選択 : 任意のコンパートメント名　 /dev

* 配置とハードウェアの構成
    * 可用性ドメインの選択　：デフォルト　Fubk:AP-TOKYO-1-AD-1
    * フォルト・ドメインの選択　：デフォルト　 FAULT-DOMAIN-1
    * イメージ：Oracle Linux 8
    * シェイプの選択：デフォルト　 VM.Standard.E2.1
* ネットワーキングの構成
    * 仮想クラウド・ネットワーク: MySQLTest
    * サブネット: パブリック・サブネット-MySQLTest
    * ネットワーク・セキュリティ・グループを使用してトラフィックを制御: いいえ
    * パブリックIPv4アドレスの割当て: はい
* SSHキーの追加：公開キー・ファイルの選択
* ブート・ボリュームの構成　：デフォルト設定


## 作成した検証環境構成
これまで作成したシステム構成のアーキテクチャは下記のようになっているはずです。
![20-11-15-01-54-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/b464ed2b-20b3-b7c0-82e3-55d7733264d0.png)


これでOracle MySQL Database Serviceを利用する準備が完了です。

# Oracle MySQL Database Serviceコンソールの操作
Oracle MySQL Database Serviceコンソール画面からできることを説明します。まずは、画面中央のアクションメニューから見ていきます。

![20-11-15-02-41-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/0676dbd3-2c37-5c51-f952-09ff29b0d506.png)


### 編集
表示名、説明、メンテナンスウィンドウの開始時間の変更ができます。
システム変数の編集はここからはできません。[アトミテック社の記事](https://cloudii.jp/news/blog/oracle-cloud/mysqlaas/)にシステム変数の変更方法の手順が紹介されています。
### 起動
停止中のインスタンスを起動できます。
### 停止
起動中のインスタンスを停止できます。
### 再起動
起動中のインスタンスを再起動できます。
### その他のアクション
* バックアップ構成の編集 : 自動バックアップ構成の設定編集が可能です
* アナリティックス・クラスタの追加 : 後述
* タグの追加 : リソースの識別を行うタグを追加できます
* 削除 : インスタンスの削除を行います


![20-11-15-02-40-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/d0b0af3e-cefa-fad3-1254-23cdb8cb0d9b.png)
次に左下のリソースメニューです。
### メトリック 
Oracle MySQL Database ServiceインスタンスのMonitoringメトリックをグラフで確認できます。確認できるメトリックの種類は[マニュアル](https://docs.cloud.oracle.com/en-us/iaas/mysql-database/doc/mysql-database-metrics.html) に記載されています。
### エンドポイント
ホスト名、プライベートIPアドレス、MYSQLポート、MYSQL Xプロトコル・ポートを確認することができます。
### アナリティクス・クラスタ
アナリティクス・クラスタの追加、アナリティクス・クラスタの情報確認ができます。[マニュアル](https://docs.cloud.oracle.com/en-us/iaas/mysql-database/doc/mysql-analytics-engine.html)を確認すると、アナリティクス・クラスタを利用することで、分析クエリをオフロードし、MySQL Analytic Engineを利用した高速処理が可能になります。MySQL Analytic Engineは、分析クエリの高速実行を目的として設計された、分散型、スケーラブル、共有型、ナッシング、インメモリ、カラム型のクエリ処理エンジンとのこと。非常に魅力的で是非試したかった機能ですが、マニュアルに下記記載を見つけて断念。(2020年11月に確認, 最小構成で2node必要とのこと・・・)
> Note: Currently, only BM.Standard.E2.64 is supported.

### バックアップ
自動バックアップ構成の編集、手動バックアップの作成の取得をおこなうことができます。バックアップの仕様は[こちら](https://docs.cloud.oracle.com/en-us/iaas/mysql-database/doc/backing-db-system.html)を確認。


# Oracle MySQL Database Serviceのインスタンスへの接続
Bastionサーバを経由で、MySQL Shell、MySQL Client、MySQL Workbenchを利用した接続方法について確認します。

## MySQL Shell
BastionサーバにSSHクライアントからアクセスします。macOSの場合はターミナルから下記コマンドを実行して接続します。

```shell-session:
ssh -i [秘密鍵のパス] opc@[BastionサーバのパブリックIPアドレス]
```
次に下記コマンドでBastionサーバ上にMySQL Shellをインストールします。

```shell-session:
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum install mysql-shell
```
Oracle MySQL Database Serviceインスタンスを作成した際に設定した管理者ユーザー名と、サービス・コンソール画面から確認できるエンドポイントのプライベートIPアドレスを指定してMySQL Shellを起動します。起動時に入力が求められるパスワードはOracle MySQL Database Serviceインスタンス作成ウィザード内で設定したパスワードです。

```shell-session:
$ mysqlsh [管理者ユーザー名]@[プライベートIPアドレス]
Please provide the password for '[管理者ユーザー名]@[プライベートIPアドレス]': **************
MySQL Shell 8.0.22

Copyright (c) 2016, 2020, 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.
Creating a session to 'username@10.0.31.3'
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 13 (X protocol)
Server version: 8.0.22-u2-cloud MySQL Enterprise - Cloud
No default schema selected; type \use <schema> to set one.
 MySQL  [プライベートIPアドレス]:33060+ ssl  JS > 
```

## MySQL Client
BastionサーバにSSHクライアントからアクセスし、下記コマンドでBastionサーバ上にMySQLをインストールします。

```shell-session:
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum install mysql
```
Oracle MySQL Database Serviceインスタンスを作成した際に設定した管理者ユーザー名と、サービス・コンソール画面から確認できるエンドポイントのプライベートIPアドレスを指定してMySQLクライアントを起動します。起動時に入力が求められるパスワードはOracle MySQL Database Serviceインスタンス作成ウィザード内で設定したパスワードです。

```shell-session:
$ mysql --host [プライベートIPアドレス] -u [管理者ユーザー名] -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.22-u2-cloud MySQL Enterprise - Cloud

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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 Workbench
(公式サイト)[https://www.mysql.com/jp/products/workbench/]
の画面中央の「ダウンロードはこちら」からダウンロードページに移動、ダウンロード（要ORACLEアカウント）後、インストールを行ってください。OS環境に応じてインストールウィザードを完了後、MySQL Workbenchを起動すると下記のような画面が表示されます。
![20-11-15-03-19-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/eca1a926-7126-78b4-c85c-f8ea55fdd757.png)


画面中央の**MySQL Connections**の横の**+**ボタンから接続情報の作成を行います。設定方法は下記を参考にしてください。
![20-11-15-03-20-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/6140b822-4428-08ff-653a-526bce1d492f.png)


設定項目の入力後、**Test  Connection**ボタンを選択すると下記のようなメッセージが表示されれば成功です。
<img width="400" alt="20-11-15-03-23-32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/f796d315-38a2-0c9e-94d8-4f8ff9e5bb01.png">

**OK**ボタンを選択すればMySQL Workbenchへの接続が完了です。
起動後の画面に接続情報が書かれたタイルが追加されるので、次回以降接続設定なしでタイルを選択するだけでOracle MySQL Database Serviceインスタンスに接続することができます。
![20-11-15-03-27-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/168f5b7e-a1c0-4b30-5a50-9b07ed719fb1.png)


なお、MySQL WorkbenchではSQLを実行するだけでなく、稼働状況の確認やデータのエクスポート・インポートも可能です。最後にMySQL Workbenchのスクリーンショットを掲載します。

![20-11-15-03-31-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/60d5b8bd-c4fa-41cb-2c0c-874237280b75.png)
![20-11-15-03-43-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/801f1316-d6e5-34be-50f7-b4110a1db31f.png)
![20-11-15-03-43-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/831381/1a924007-c97e-4224-f191-359d87b11d78.png)




# 関連情報
[公式サイト](https://www.oracle.com/jp/mysql/)
[Oracle Cloud Infrastructure Documentation MySQL Database](https://docs.cloud.oracle.com/en-us/iaas/mysql-database/index.html)
[[スマートスタイル社　技術ブログ] MySQL Database Service のインスタンスを作成してみる](https://www.s-style.co.jp/blog/2020/11/6854/)
[[アトミテック社 ブログ] Oracle Cloud（OCI）ついにPaaSのMySQL（MySQL Database Service）が登場！](https://cloudii.jp/news/blog/oracle-cloud/mysqlaas/) 
[[Qiita] [Oracle Cloud] MySQL Database Service の Getting Started をやってみた](https://qiita.com/sugimount/items/cbe9a15c169fe597894e)
[[Qiita] [Oracle Cloud] MySQL Database Service でモニタリング監視をしてみた](https://qiita.com/sugimount/items/9cf09d80aab8cdc44cfe)
[MySQL Database Serviceを触るまでのお話](https://next4us-ti.hatenablog.com/entry/2020/09/26/195101)