初めに
冒頭ですが、この記事の位置付けは、次のシリーズ記事の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アドレスのみを許可するように。 |
- このテストでは、CIDRブロックの許可リストを「0.0.0.0/0」に設定しています。運用時には範囲を絞り込むことが推奨されます。例えば、接続元(クライアント)のIPアドレス範囲のみを許可するのが良いでしょう。
- OCI Bastionを作成する際には、ターゲットのVCNとサブネットを指定する必要がありますが、Bastion自体に対し、配置場所を指定する必要はありません(誤解されることがよくあります)。
Bastionがアクティブの状態になると、「プライベート・エンドポイントIP」は次の画面から確認できます。このIPはターゲット・サブネット内で自動的に割り当てられます。次のステップで、このIPをセキュリティ・リストの入力ルールに追加します。「CIDRブロック許可リスト」を編集したい場合は、「編集」ボタンをクリックすれば大丈夫です。
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からの接続
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に制限されます。 |
以上です。
関連記事
オラクル・クラウドの個人ブログ一覧