Connessione a un'applicazione esterna
Le applicazioni e i driver utilizzano stringhe di connessione per effettuare una connessione a IBM Cloud® Databases for MySQL. Il servizio fornisce stringhe di connessione specificamente per driver e applicazioni. Le stringhe di connessione sono visualizzate nel pannello Endpoint della Panoramicadella distribuzione e possono essere richiamate anche dal plug-in CLI diCloud Databases e dall'API Cloud Databases.
Le stringhe di connessione possono essere utilizzate da una qualsiasi delle credenziali create sulla vostra distribuzione. Mentre è possibile utilizzare l'utente admin per tutte le connessioni e le applicazioni, potrebbe essere meglio creare utenti specificatamente per le applicazioni a cui connettersi. La documentazione sulla generazione delle credenziali si trova nella pagina Creare utenti e ottenere stringhe di connessione.
Connessione con un driver di linguaggio
Tutte le informazioni che un driver deve avere per effettuare una connessione alla propria distribuzione sono nella sezione "mysql" delle tue stringhe di connessione. La tabella contiene una ripartizione per riferimento.
| Nome campo | Indice | Descrizione |
|---|---|---|
Type |
Tipo di connessione - per MySQL, è "URI". | |
Scheme |
Schema per un URI - per MySQL, è "mysql". | |
Path |
Percorso per un URI - per MySQL, è il nome del database. Il valore predefinito è ibmclouddb. |
|
Authentication |
Username |
Il nome utente utilizzato per la connessione. |
Authentication |
Password |
Una password per l'utente - potrebbe essere visualizzata come $PASSWORD. |
Authentication |
Method |
Come avviene l'autenticazione; l'autenticazione "diretta" è gestita dal driver. |
Hosts |
0... |
Un nome di host e una porta a cui connettersi. |
Composed |
0... |
Un URI che combina Schema, Autenticazione, Host e Percorso. |
Certificate |
Name |
Il nome assegnato per il certificato proprietario del servizio per la distribuzione del database. |
Certificate |
Base64 | Una versione codificata base64 del certificato. |
0...indica una o più di queste voci in una schiera.
Molti driver MySQL sono in grado di creare una connessione alla tua distribuzione quando viene fornita la stringa di connessione formattata URI trovata nel campo "composto" delle informazioni di connessione. Per esempio
mysql://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?ssl-mode=verify-full
Per ulteriori informazioni sugli stati ssl-mode, consultare Ulteriori parametri di connessione.
Il seguente esempio utilizza le informazioni dalla tua stringa di connessione e il driver Java jdbc per connettersi al tuo database.
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;
}
}
Il seguente esempio utilizza le informazioni dalla tua stringa di connessione e il driver Python pymysql per connettersi al tuo database. Questo è solo un semplice esempio di connessione, senza gestione degli errori o logica di tentativi e potrebbe non essere adatto alla produzione.
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()
Driver TLS e supporto per i certificati proprietari del servizio
Tutte le connessioni a Databases for MySQL sono abilitate per TLS 1.2, quindi il driver che utilizzi per la connessione deve essere in grado di supportare la crittografia. L'installazione viene fornita anche con un certificato proprietario del servizio, in modo che il driver possa verificare il server al momento della connessione.
Per ulteriori informazioni, vedi Cloud Databases Certificates FAQ.
Utilizzo del certificato proprietario del servizio
- Copiare le informazioni del certificato dal pannello Endpoints o dal campo Base64 delle informazioni di connessione.
- Se necessario, decodificare la stringa Base64 in testo.
- Salvare il certificato in un file. (è possibile utilizzare il nome fornito o il proprio nome file).
- Fornire il percorso al certificato al conducente o al cliente.
Supporto del plug-in CLI per il certificato proprietario del servizio
È possibile visualizzare il certificato decodificato per la propria distribuzione con il plugin CLI con il comando ibmcloud cdb deployment-cacert "your-service-name". Decodifica il base64 in testo. Copiare e salvare
l'output del comando in un file e fornire il percorso del file al guidatore.
Altri Driver
MySQL ha un array di driver di lingua. La tabella seguente illustra alcuni dei più comuni. Per ulteriori informazioni, consultare i Connettori e le API MySQL's.
| Lingua | Unità | Esempi |
|---|---|---|
| PHP | mysql |
Supporto API per le transazioni |
| Ruby | ruby-mysql |
L'API Ruby/MySQL |
| C# | ODBC |
Guida per gli sviluppatori del connettore ODBC |
| Vai | mysql |
Go-MySQL-Driver |
Quando ci si connette a MySQL utilizzando PHP, è necessario modificare il plug-in di autenticazione da sha256_password a mysql_native_password.