LoginSignup
4
1

OCI Bastion経由でMySQL Database Serviceに接続する

Last updated at Posted at 2022-05-04

初めに
冒頭ですが、この記事の位置付けは、次のシリーズ記事の1つです。
OCI Bastion サービス


MySQL Database Serviceに接続したい時、OCI Bastion サービスを利用すれば、踏み台サーバを立てず、On-Pのクライアントから、サブネット(Public/Private)にあるMySQL DBに接続できます。OCI Bastionサービスは無料で使用できます。

検証環境

項目 内容 コメント
DBタイプ MySQL Database Service IaaS DBにも接続可能
クライアントOS Oracle Linux 8
Windows Server 2019
DB接続ツール MySQL Shell, MySQL Client For Linux
MySQL Workbench 8.0.29 For Windows
SQL Developer Ver 21.4.3 (JDK8付き) For Windows
JDBCドライバー mysql-connector-java-8.0.29.jar For SQL Developer

目次

1. 事前準備

クライアント側で、DB接続ツールを用意しておきます。

MySQL Shellからの接続
MySQL Shellをインストールするコマンド: sudo yum install mysql-shell

MySQL Clientからの接続
MySQL Clientをインストールするコマンド: sudo yum install mysql

MySQL Workbenchからの接続
ダウンロードURL:https://dev.mysql.com/downloads/workbench/
インストーラをダウンロードし、実行してください(詳細を省略)。

SQL Developerからの接続

  • ダウンロードURL:https://www.oracle.com/tools/downloads/sqldev-downloads.html
    この例は、Windows版(JDK8付き)を使用します(※オラクルのアカウントは必要です)。

  • Zipファイルを解凍して後、sqldeveloper.exeを実行すれば起動できます(インストール不要)。

  • JDBCドライバーのダウンロード
    URL: https://dev.mysql.com/downloads/windows/installer/8.0.html
    インストーラ・ファイルをダウンロードし、実行します。

    タイプは、"Custom"を選んで続行します。

    以下のように、"MySQL Connector"を選んで続行します。

    "MySQL Connector"をダウンロードし、インストールします。

    インストール・パス:C:\Program Files (x86)\MySQL\Connector J 8.0

  • JDBCドライバーの追加
    SQL Developer MENU -> Tools -> Preferences -> Database -> Third Party JDBC Drivers -> Add Entry
    以下のように、ドライバーを指定します。

    OKをクリックし追加します。

2. Bastionの作成

Identity & Security -> Bastion -> Create Bastion

項目 内容
Bastion名 適当な名前を入力
ターゲットVCNとサブネット MySQLが所属するVCNとサブネットを選択
CIDRブロック許可リスト このテストではCIDRブロックの許可リストを「0.0.0.0/0」に設定しているが、運用時には範囲を絞り込むことが推奨される。例えば、 接続元(クライアント)のIPアドレスのみを許可するように。


注意
OCI Bastionを作成する時、ターゲットのVCNとサブネットを指定する必要がありますけど、Bastion自体に対し、置き場所の指定は不要です。

Bastionはアクティブの状態になりましたら、「プライベート・エンドポイントIP」は以下の画面から確認できます。このIPが、ターゲット・サブネット内で自動割り当てられます。次のステップでこのIPをセキュリティ・リストのイングレス・ルールに追加します。 「CIDRブロック許可リスト」を編集したい場合は、「編集」ボタンをクリックすればOKです。
image.png

3. セッションの作成

Bastion -> Sessions -> Create session

項目 内容
セッション・タイプ "SSH port forwarding session"を選択
ターゲット・ホストに接続する方法 "IPアドレス"を選択 (デフォルト)
IPアドレス 接続先DBの「プライベートIP」
ポート 3306
SSHキー 既存のキーファイルを利用するか、新しいキーペアを作成する。(秘密キーをDBクライアント側に保存してください。)

ヒント:DBの情報詳細画面で、MySQL DatabaseのプライベートIPが取得できます。

セッションはアクティブの状態になりましたら、次のように、3ドットのメニューをクリックしてSSHコマンドをコピーします。このコマンドは、STEP 5. SSHトンネルの作成で使用されます。

デフォルトでは、セッションは3時間有効ですが、Bastionを作成する際にはこの期間を変更することが可能です。

4. セキュリティ・リストにイングレス・ルールを追加

MySQL Database Serviceに接続するために、TCPポート3306をセキュリティ・リストのイングレス・ルールに追加する必要があります。

"Source CIDR"は、Bastionの「プライベート・エンドポイントIP」です(Bastionの情報ページに表示されます)。

5. SSHトンネルの作成

SSHトンネルを作成するコマンド

ssh -i <privateKey> -N -L <localPort>:10.0.1.80:3306 -p 22 <bastion_ocid>@host.bastion.ap-tokyo-1.oci.oraclecloud.com

上記ステップ2でコピーしたものです。

  • <privateKey>を秘密キーのパスとファイル名に置き換える。
     Linuxの例:~/.ssh/id_rsa
     Windowsの例(PowerShell):$home\.ssh\id_rsa
     秘密キーを上記パスに保存してください(パスが存在しない場合、作成しておいてください)。
  • <localPort>3306に置き換える。
  • <Private_IP_of_DB>は自動に実のIPが埋められるので、変更する必要がない。

コマンドを置き換えた後、実施します(結果を省略)。

6. MySQLに接続

6-1. MySQL Shellからの接続

コマンド:mysqlsh <Username>@127.0.0.1

[opc@linux8 ~]$ mysqlsh admin@127.0.0.1
Please provide the password for 'admin@127.0.0.1': ************
Save password for 'admin@127.0.0.1'? [Y]es/[N]o/Ne[v]er (default No): Y
MySQL Shell 8.0.29

Copyright (c) 2016, 2022, 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 'admin@127.0.0.1'
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 93
Server version: 8.0.29-cloud MySQL Enterprise - Cloud
No default schema selected; type \use <schema> to set one.
 MySQL  127.0.0.1:3306 ssl  JS > \s
MySQL Shell version 8.0.29

Connection Id:                93
Current schema:
Current user:                 admin@10.0.1.213
SSL:                          Cipher in use: ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2
Using delimiter:              ;
Server version:               8.0.29-cloud MySQL Enterprise - Cloud
Protocol version:             Classic 10
Client library:               8.0.29
Connection:                   127.0.0.1 via TCP/IP
TCP port:                     3306
Server characterset:          utf8mb4
Schema characterset:          utf8mb4
Client characterset:          utf8mb4
Conn. characterset:           utf8mb4
Result characterset:          utf8mb4
Compression:                  Disabled
Uptime:                       5 hours 41 min 15.0000 sec

Threads: 6  Questions: 47978  Slow queries: 0  Opens: 377  Flush tables: 3  Open tables: 296  Queries per second avg: 2.343
 MySQL  127.0.0.1:3306 ssl  JS >

6-2. MySQL Clientからの接続

コマンド:mysql -h <hostname or IP> -u myuser -pMySecretPassword
'-p'のみの場合、プロンプトが表示されたらパスワードを入力してください。

[opc@linux8 ~]$ mysql -h 127.0.0.1 -u admin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 91
Server version: 8.0.29-cloud MySQL Enterprise - Cloud

Copyright (c) 2000, 2021, 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> \s
--------------
mysql  Ver 8.0.26 for Linux on x86_64 (Source distribution)

Connection id:          91
Current database:
Current user:           admin@10.0.1.213
SSL:                    Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         8.0.29-cloud MySQL Enterprise - Cloud
Protocol version:       10
Connection:             127.0.0.1 via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               3306
Binary data as:         Hexadecimal
Uptime:                 5 hours 37 min 59 sec

Threads: 6  Questions: 47443  Slow queries: 0  Opens: 357  Flush tables: 3  Open tables: 276  Queries per second avg: 2.339
--------------

mysql>

6-3. MySQL Workbenchからの接続

  • 接続を新規作成 (CTRL+U)
  • 接続後

6-4. SQL Developerからの接続

  • 接続を新規作成
    Database Type: MySQLを指定
    Hostname: localhostを指定 (重要)
    「テスト」ボタンを押し、接続をテストします。接続成功を確認したら、「接続」ボタンを押し、接続を立てます。

  • 接続後

付録

トラブル・シューティング

DBへの接続が失敗した場合、以下のような原因は一般的です。ご参考ください。

  • 無効なユーザーまたはパスワード。
  • MySQLインスタンスはまだ起動していない。
  • リスナー・ポート(TCP 3306)は、イングレス・ルールに追加されていない。
    対策:セキュリティ・リストを確認してください。
  • SSHトンネルは未作成か、作成が失敗した。
    トンネル作成失敗、或いはタイムアウトの時、以下のメッセージが表示されます。
    Connection to host.bastion.ap-tokyo-1.oci.oraclecloud.com closed by remote host.
  • Bastionのセッション期限が切れた(デフォルトは3時間)。
    セッション期限が切れた後、SSHトンネルを作成しようとしたら、以下のエラーが出ます。
    <bastion_ocid>@host.bastion.ap-tokyo-1.oci.oraclecloud.com: Permission denied (publickey)
    対策:セッションの再作成は必要です。

Bastionの制限

項目 内容
最大Bastion数 テナンシ毎に5つ
最大セッション数 Bastionあたり20セッション
セッション存続時間 30分~3時間
データ転送制限 データ転送の制限はありません。
ただし、SSH接続あたりの接続速度は16 Mbpsに制限されます。

以上です。


関連記事
オラクル・クラウドの個人シリーズ・ブログ

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1