外部アプリケーションの接続
アプリケーションおよびドライバーは、接続ストリングを使用して、IBM Cloud® Databases for MySQLへの接続を確立します。 このサービスは、ドライバーおよびアプリケーション専用の接続ストリングを提供します。 接続文字列は、デプロイメントの [概要] の [エンドポイント] パネルに表示されます。また、Cloud Databases の CLI プラグイン および Cloud Databases API から取得することもできます。
デプロイメント上に作成されたすべての資格情報は、その接続ストリングを使用できます。 すべての接続およびアプリケーションに対して admin ユーザーを使用できますが、接続するアプリケーション専用のユーザーを作成することをお勧めします。 資格情報の生成方法については、ユーザーの作成と接続文字列の取得についてのページを参照してください。
言語のドライバーによる接続
ドライバーがデプロイメントに接続するために必要なすべての情報は、接続文字列の「mysql」セクション内にあります。 参照用に、接続文字列の構成要素を次の表に示します。
フィールド名 | 索引 | 説明 |
---|---|---|
Type |
接続のタイプ - MySQL, の場合は「URI」。 | |
Scheme |
URIのスキーム - MySQL, の場合は "mysql" です。 | |
Path |
URI のパス- MySQL の場合は、データベース名。 デフォルトは ibmclouddb です。 |
|
Authentication |
Username |
接続に使用するユーザー名。 |
Authentication |
Password |
ユーザーのパスワードは、 $PASSWORD のように表示されます。 |
Authentication |
Method |
認証が行われる方法。「direct」認証はドライバーによって処理されます。 |
Hosts |
0... |
ホスト名と接続先ポート。 |
Composed |
0... |
Scheme、Authentication、Host、Pathを組み合わせたURI。 |
Certificate |
Name |
データベース展開のためのサービス専有証明書の割り当て名。 |
Certificate |
Base64 | base64 でエンコードされたバージョンの証明書 |
0...
は、配列内のこれらの項目の 1 つ以上を示します。
接続情報の「Composed」フィールドに URI 形式の接続文字列があれば、MySQL ドライバーの多くはデプロイメントに接続できます。 例 :
mysql://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?ssl-mode=verify-full
ssl-mode
の状態について詳しくは、 追加の接続パラメーターを参照してください。
以下の例では、接続ス文字列および Java ドライバー jdbc の情報を使用して、データベースに接続します。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class App {
private final String STATUS_COMMAND = "SHOW VARIABLES LIKE '%version%';";
private Connection connect = null;
private Statement stmt = null;
private ResultSet rs = null;
private final String url = "mysql://127.0.0.1:30799";
private final String username = "";
private final String password = "";
private final Boolean useSSL = true;
public static void main(String args[]) throws Exception {
App app = new App();
final byte maxConnectionAttempt = 5;
byte currentConnectionAttempt = 0;
while (!app.connectDatabase() && currentConnectionAttempt < maxConnectionAttempt)
++currentConnectionAttempt;
if (currentConnectionAttempt >= maxConnectionAttempt) {
System.out.println(currentConnectionAttempt + " weren't successfull!");
} else {
app.printStatus();
app.closeConnection();
}
}
public void printStatus() {
try {
stmt = connect.createStatement();
rs = stmt.executeQuery(STATUS_COMMAND);
while (rs.next())
System.out.println(rs.getString(1) + ": " + rs.getString(2));
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
closeConnection();
}
}
private void closeConnection() {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (connect != null) {
connect.close();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("Connection closed.");
}
public boolean connectDatabase() {
// https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html
try {
Properties props = new Properties();
props.setProperty("user", username);
props.setProperty("password", password);
props.setProperty("useSSL", Boolean.toString(useSSL));
props.setProperty("sslMode", (useSSL ? "REQUIRED" : "DISABLED"));
props.setProperty("requireSSL", Boolean.toString(useSSL));
props.setProperty("verifyServerCertificate", Boolean.toString(useSSL));
Class.forName("com.mysql.cj.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:" + url, props);
return true;
} catch (SQLException ex) {
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
} catch (ClassNotFoundException ex) {
System.out.println("Connector class can not be found: " + ex.getMessage());
}
return false;
}
}
以下の例では、接続文字列および Python ドライバー pymysql からの情報を使用して、データベースに接続します。 これは接続の簡単な例に過ぎません。エラー処理も再試行ロジックもないので、実稼働環境に適しているとはいえません。
import pymysql
connection = pymysql.connect(
host="hostname",
port=32089,
user="username",
passwd="password",
ssl_ca="/home/user/mysql_ca.crt",
ssl_verify_cert=True,
ssl_verify_identity=True)
cursor = connection.cursor()
cursor.execute("SHOW STATUS;")
for row in cursor:
print(row[0] + "\t" + row[1])
cursor.close()
connection.close()
ドライバーTLSおよびサービス独自証明書のサポート
Databases for MySQL へのすべての接続は TLS 1.2 が有効になっているので、接続に使用するドライバーは、暗号化のサポートが可能であることが必要です。 また、ドライバが接続時にサーバを検証できるように、配備にはサービス専有証明書も付属しています。
詳しくは、 Cloud Databases Certificates FAQを参照してください。
サービス独自証明書の使用
- *「エンドポイント」*パネルまたは接続情報の Base64 フィールドから証明書情報をコピーします。
- 必要に応じて、Base64 ストリングをテキストにデコードします。
- 証明書をファイルに保存します (ファイル名は、提供される名前をそのまま使用することも、自分で指定することもできます)。
- ドライバーまたはクライアントに証明書へのパスを提供します。

サービス独自証明書のCLIプラグインサポート
コマンド ibmcloud cdb deployment-cacert "your-service-name"
を使用して、デプロイメントのデコードされた証明書を CLI プラグインと共に表示することができます。 これにより、base64 がテキストにデコードされます。 コマンドの出力をコピーしてファイルに保存し、そのファイルのパスをドライバーに提供します。
その他のドライバー
MySQL には、多くの言語ドライバーがあります。 最もよく使用されているドライバーを以下の表にいくつか示します。 詳しくは、MySQLの 「コネクターおよび API」 を参照してください。
言語 | ドライバー | 例 |
---|---|---|
PHP | mysql |
トランザクションの API サポート |
Ruby | ruby-mysql |
Ruby/MySQLAPI |
C# | ODBC |
LiMySQL ODBC開発者ガイド |
Go | mysql |
Go-MySQL-Driver |
PHP を使用して MySQL に接続する場合、認証プラグインを sha256_password
から mysql_native_password
に変更する必要があります。