【はじめの一歩】OCIのMySQL Database Serviceをつかってみよう！（MDS＋Python 他②）

# はじめに
講釈よりも、とにかく触りたい・使いたい初心者向け手順書テイスト
OCIのMDSをたてて、Python等で繋げて使ってみる。
今回はComputeにConnector/Pythonをインストールし接続まで。
前提：OCIの有償アカウントであること（30日間無料トライアルの方もOKです）

本手順は、翔泳社の良書
[MySQL徹底入門 第4版 MySQL 8.0対応](https://www.shoeisha.co.jp/book/detail/9784798161488)を参考としています。
同書籍の[サンプルファイル](https://www.shoeisha.co.jp/book/download/9784798161488/detail)を活用します。
※サンプルファイルのReadMeに以下のありがたいお言葉があるので活用して効率化します。
「本書のサンプルデータは自由に利用できることとします。改変のほか、自由に利用、複製、再配布することができます。」

ただ、サンプルファイルの日本語部分は文字化けしているファイルがあるので、
そのまま使うのが難しい場合があります。

# 構成
[前回：MDS＋Python 他①](https://qiita.com/hm-peasant/items/246b19095e347e568f44)で構成した環境を元に記載します。
未だの方は前回記事を御確認ください。
・Compute：Oracle Linux8
・MDS：MySQL8.0

データベース構造は以下の通りとします。

・データベースとテーブル作成
・データベース名：mdstest
・ユーザー名：mdsuser
・パスワード：任意 （パスワードポリシー:8字以上、大・小・数字・記号　例：Mdsp@ss01）
・文字コード：utf8mb4
・テーブル名：commodity
| Field      | Type        | Null       |key         |default     |      extra|
|:-----------|:------------|:-----------|:-----------|:-----------|:-----------|
| code       | int         | Not Null   |PRI         |NULL        |AUTO_INCREMENT |
| name       | VARCHAR(30) | -          | -          |NULL        | -           |
| price      | int         | -          | -          |NULL        | -           |
| start_date | DATETIME    | -          | -          |NULL        | -           |
| last_update| TIMESTAMP   | -          | -          |CURRENT_TIMESTAMP  |   DEFAULT_GENERATED|

Connector/Pythonは「Pure Python版」を使います。
# MDS　データベース作成
MDSを停止させていたら起動します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699246/cba04e52-37f9-a7a2-3d16-2f1553170237.png)

cloud shellを起動させコンピュート・インスタンスにssh接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699246/51a3178a-341b-281b-84b0-8e4bad11e1ea.png)

$ ssh -i アップロードした秘密キー パブリックIPアドレス -l opc
例：$ ssh -i ssh-key-2022-05-31.key 150.230.193.122-l opc

MDSに接続
$ mysql -u MDSのユーザー名 -p -h MDSのプライベートIPアドレス
例：mysql -u root -p -h 10.0.1.51

データベース「mdstest」を作成し選択します。
```ruby:mdstest
CREATE DATABASE mdstest CHARACTER SET utf8mb4;
use mdstest;
```
テーブル「commodity」を作成して確認します。

```ruby:commodity
CREATE TABLE commodity(
	code INT AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(30),
	price INT,
	start_date DATETIME,
	last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) CHARACTER SET utf8mb4;

desc commodity;
```

実行ユーザー作成
```ruby:ユーザー作成
CREATE USER 'mdsuser'@'%' IDENTIFIED BY 'Mdsp@ss01';
GRANT ALL PRIVILEGES ON mdstest.* TO 'mdsuser'@'%';
SELECT user,host FROM mysql.user;
quit
```
# Connector/Python インストール

■Pythonのバージョン確認、Oracle Linux 8.2以降を実行しているか確認
```ruby:バージョン確認
$ python -V
Python 3.6.8
$ cat /etc/oracle-release 
Oracle Linux Server release 8.5
```
■Python3.8のインストールとコンピュートから一旦ログアウト
```ruby:Python3.8
$ sudo dnf module install python38 -y
$ sudo alternatives --set python /usr/bin/python3.8
$ python -V
Python 3.8.12
$ exit
```
■Connector/Python インストール
[Connector/Python 公式サイト　ダウンロードページ](https://dev.mysql.com/downloads/)
より、「Connector/Python 」のリンクをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699246/e8156e8f-5b3a-91bc-ca72-e88aecd6daf7.png)
・Select Operating System:Red Hat Enterprise Linux/Oracle Linux
・Select OS Version:Red Hat Enterprise Linux 8/Oracle Linux 8(ARM,64-bit)※　
　　※AmpereシェイプはARMを選択。Intel系シェイプの場合はx86-64bitを選択
・「Download」ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699246/49583478-4209-6284-d012-1d310cca4a72.png)

画面下の「No thanks,just start my download.」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699246/6540db92-23f5-71da-ec5a-d110d2d86f45.png)

Cloud Shell画面の左上ハンバーガーボタンをクリック
「Upload」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699246/6f014cf9-2afe-a595-9ca5-dddcf80ac96a.png)

表示されたポップアップ画面にコンピュート作成時にダウンロードしたRPMファイルをExplorerからドラッグ＆ドロップ
「Upload」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699246/219625af-1616-2092-694a-2f3baaad43e4.png)

scpでコンピュートへRPMファイルを送信
```ruby:ファイル転送
$ scp -i [ssh秘密鍵ファイル] [コピー元のファイル] [コピー先]
例：$ scp  -i ssh-key-2022-05-31.key mysql-connector-python3-8.0.29-1.el8.aarch64.rpm opc@140.238.55.10:/home/opc/
```
sshコンピュートへログイン
$ ssh -i アップロードした秘密キー パブリックIPアドレス -l opc
例：$ ssh -i ssh-key-2022-05-31.key 150.230.193.122-l opc

```ruby:インストール
$ sudo dnf install ./転送したrpmファイル -y
例：$ sudo dnf install ./mysql-connector-python3-8.0.29-1.el8.aarch64.rpm -y
```
# 接続確認

■pyファイル作成
$ vi connect.py
下記を転記※し、「ESCキー →　:(コロン)　→ wq!」で上書き保存
　　※ mysql.connector.connectのカッコ内：user、password、host、databaseを自身の環境に合わせて編集
```ruby:
import mysql.connector
from mysql.connector import errorcode

try:
    conn = mysql.connector.connect(user='mdsuser', password='Mdsp@ss01',
                                   host='10.0.1.51',
                                   database='mdstest', use_pure=True)
    print(conn.is_connected())

except mysql.connector.Error as err:
    #print("Error:", err)
    print("VendorError:", err.errno)
    print("SQLState:", err.sqlstate)
    print("SQLException:", err.msg)
else:
    conn.close()

```

■実行
$ python connect.py
MDSのデータベースへ接続できた場合、「True」が帰ってくる。
```ruby:接続確認
$ python connect.py 
True
$
```
今回は以上です。長文お付き合い頂き、ありがとうございました。

【重要】ＭＤＳは安価ですが、使わないのであれば、停止する、もしくは削除するのを忘れずに
　　　　停止だけだと、ストレージは月単位で課金されます。
お片付け方法は、[前回：MDS＋Python 他①お片付け](https://qiita.com/hm-peasant/items/246b19095e347e568f44#%E3%81%8A%E7%89%87%E4%BB%98%E3%81%91)を参考にしてください。