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.

mysql/URI-Verbindungsinformationen
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

  1. Kopieren Sie die Zertifikatsinformationen aus der Anzeige Endpunkte oder aus dem Feld Base64 der Verbindungsinformationen.
  2. Decodieren Sie bei Bedarf die Base64-Zeichenfolge in Text.
  3. Speichern Sie das Zertifikat in einer Datei. Sie können den angegebenen Namen verwenden oder einen eigenen Dateinamen angeben.
  4. Geben Sie gegenüber dem Treiber oder Client den Pfad zum Zertifikat an.

Bedienfeld CLI-Endpunkte
Bedienfeld CLI-Endpunkte

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.

MySQL
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.