Verbindung mit einer externen Anwendung herstellen
Von den Anwendungen und Treibern werden Verbindungszeichenfolgen zum Herstellen einer Verbindung zu IBM Cloud® Databases for MySQL verwendet. Der Service bietet Verbindungszeichenfolgen speziell für Treiber und Anwendungen. Verbindungszeichenfolgen werden im Bereich Endpunkte in der Übersicht Ihrer Bereitstellung angezeigt und können auch über das CLI-Plug-in von Cloud Databases und die API von Cloud Databases abgerufen werden.
Die Verbindungszeichenfolgen können von einem der Berechtigungsnachweise verwendet werden, die Sie für Ihre Bereitstellung erstellt haben. Sie können den Benutzer "admin" zwar für alle Verbindungen und Anwendungen verwenden, es kann jedoch besser sein, speziell für Ihre Anwendungen Benutzer zu erstellen, zu denen eine Verbindung hergestellt werden kann. Die Dokumentation zum Generieren von Berechtigungsnachweisen finden Sie auf der Seite Benutzer erstellen und Verbindungszeichenfolgen abrufen.
Verbindung mit Treiber für Sprache herstellen
Alle Informationen, die ein Treiber benötigt, um eine Verbindung zu Ihrer Bereitstellung herzustellen, sind im Abschnitt "mysql" Ihrer Verbindungszeichenfolgen enthalten. Die Tabelle enthält eine Aufgliederung zu Referenzzwecken.
| Feldname | Index | Beschreibung |
|---|---|---|
Type |
Art der Verbindung - für MySQL, ist es "URI". | |
Scheme |
Schema für einen URI - für MySQL, ist es "mysql". | |
Path |
Pfad für einen URI - bei MySQL ist dies der Datenbankname. Der Standardwert ist ibmclouddb. |
|
Authentication |
Username |
Der Benutzername, den Sie zum Herstellen einer Verbindung verwenden |
Authentication |
Password |
Ein Passwort für den Benutzer - könnte als $PASSWORD angezeigt werden. |
Authentication |
Method |
Gibt an, wie die Authentifizierung erfolgt; die 'direkte' Authentifizierung wird vom Treiber abgewickelt |
Hosts |
0... |
Hostname und Port, zu denen die Verbindung hergestellt werden soll. |
Composed |
0... |
Ein URI, der Schema, Authentifizierung, Host und Pfad kombiniert. |
Certificate |
Name |
Der zugewiesene Name für das diensteigene Zertifikat für die Datenbankbereitstellung. |
Certificate |
Base64 | Eine Version des Zertifikats in Base64-Codierung |
0...gibt mindestens einen dieser Einträge in einem Array an.
Viele MySQL-Treiber sind in der Lage, eine Verbindung zu Ihrer Bereitstellung herzustellen, wenn die im Feld "Zusammengesetzt" enthaltene URI-formatierte Verbindungszeichenfolge der Verbindungsinformationen angegeben wird. Beispiel:
mysql://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?ssl-mode=verify-full
Weitere Informationen zu ssl-mode-Status finden Sie unter Zusätzliche Verbindungsparameter.
Im folgenden Beispiel werden die Informationen aus Ihrer Verbindungszeichenfolge und der JDBC des Java-Treibers verwendet, um eine Verbindung zu Ihrer Datenbank herzustellen.
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;
}
}
Im folgenden Beispiel werden die Informationen aus Ihrer Verbindungszeichenfolge und dem Python-Treiber pymysql verwendet, um eine Verbindung zu Ihrer Datenbank herzustellen. Dies ist nur ein einfaches Verbindungsbeispiel ohne Fehlerbehandlung oder Wiederholungslogik, das möglicherweise nicht für die Produktion geeignet ist.
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()
Unterstützung für Treiber-TLS und diensteigene Zertifikate
Alle Verbindungen zu Databases for MySQL sind für TLS 1.2 ausgelegt, d. h. der Treiber, den Sie für die Verbindung verwenden, kann die Verschlüsselung unterstützen. Ihre Bereitstellung umfasst auch ein diensteigenes Zertifikat, damit der Treiber den Server bei der Verbindung verifizieren kann.
Weitere Informationen finden Sie unter Cloud Databases Zertifikate-Häufig gestellte Fragen.
Verwendung des diensteigenen Zertifikats
- Kopieren Sie die Zertifikatsinformationen aus der Anzeige Endpunkte oder aus dem Feld Base64 der Verbindungsinformationen.
- Decodieren Sie bei Bedarf die Base64-Zeichenfolge in Text.
- Speichern Sie das Zertifikat in einer Datei. Sie können den angegebenen Namen verwenden oder einen eigenen Dateinamen angeben.
- Geben Sie gegenüber dem Treiber oder Client den Pfad zum Zertifikat an.
CLI-Plugin-Unterstützung für das diensteigene Zertifikat
Sie können das decodierte Zertifikat für Ihre Bereitstellung mit dem CLI-Plugin mit dem Befehl ibmcloud cdb deployment-cacert "your-service-name" anzeigen. Dadurch werden in Base64 codierte Zeichenfolgen in Text decodiert.
Kopieren Sie die Ausgabe des Befehls, speichern Sie sie in einer Datei und geben Sie den Pfad der Datei für den Treiber an.
Andere Treiber
MySQL verfügt über ein Array von Sprachtreibern. Die folgende Tabelle deckt die gängigsten Sprachen ab. Weitere Informationen finden Sie im Abschnitt MySQL-Connectors und APIs.
| Sprache | Treiber | Beispiele |
|---|---|---|
| PHP | mysql |
API-Unterstützung für Transaktionen |
| Ruby | ruby-mysql |
Die Ruby/MySQL |
| C# | ODBC |
LiMySQL ODBC Entwicklerhandbuch |
| Los | mysql |
Go-MySQL-Driver |
Wenn Sie über PHP eine Verbindung zu MySQL herstellen, müssen Sie das Authentifizierungs-Plug-in von sha256_password in mysql_native_password ändern.