Conexión de una aplicación externa
Sus aplicaciones y controladores utilizan series de conexión para realizar una conexión con IBM Cloud® Databases for MySQL. El servicio proporciona series de conexión específicamente para controladores y aplicaciones. Las cadenas de conexión se muestran en el panel Puntos finales de la Descripción general de su implementación y también se pueden recuperar desde el complemento CLI de Cloud Databases y la API de Cloud Databases.
Las series de conexión pueden ser utilizadas por cualquiera de las credenciales que haya creado en el despliegue. Aunque puede utilizar el usuario de administración para todas las conexiones y aplicaciones, puede ser mejor crear usuarios específicamente para conectarse con las aplicaciones. Puede consultar la documentación sobre cómo generar credenciales en la página Creación de usuarios y obtención de series de conexión.
Conexión con un controlador de un lenguaje
Toda la información que un controlador necesita para establecer una conexión con el despliegue está en la sección "mysql" de las cadenas de conexión. La tabla contiene un desglose para referencia.
Nombre de campo | Índice | Descripción |
---|---|---|
Type |
Tipo de conexión - para MySQL, es "URI". | |
Scheme |
Esquema para un URI - para MySQL, es "mysql". | |
Path |
Vía de acceso para un URI: para MySQL es el nombre de la base de datos. El valor predeterminado es ibmclouddb . |
|
Authentication |
Username |
El nombre de usuario que utiliza para conectarse. |
Authentication |
Password |
Una contraseña para el usuario - podría mostrarse como $PASSWORD . |
Authentication |
Method |
Cómo se realiza la autenticación; la autenticación "directa" la maneja el controlador. |
Hosts |
0... |
Un nombre de host y un puerto al que conectar. |
Composed |
0... |
Un URI que combina esquema, autenticación, host y ruta. |
Certificate |
Name |
El nombre asignado para el certificado propietario del servicio para el despliegue de la base de datos. |
Certificate |
Base64 | Una versión codificada en base64 del certificado. |
0...
indica una o más de estas entradas en una matriz.
Muchos controladores de MySQL pueden establecer una conexión con el despliegue cuando se proporciona la serie de conexión con formato de URI que se encuentra en el campo "compuesto" de la información de conexión. Por ejemplo
mysql://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?ssl-mode=verify-full
Para obtener más información sobre los estados de ssl-mode
, consulte Parámetros de conexión adicionales.
El ejemplo siguiente utiliza la información de la serie de conexión y el controlador Java jdbc para conectarse a la base de datos.
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;
}
}
El ejemplo siguiente utiliza la información de la serie de conexión y el controlador Python pamysql para conectarse a la base de datos. Esto es solo un ejemplo de conexión simple, sin el manejo de errores o la lógica de reintento y puede que no sea adecuado para el entorno de producción.
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()
Soporte de TLS para controladores y certificados propietarios de servicios
Todas las conexiones a Databases for MySQL tienen habilitado TLS 1.2, por lo que el controlador que se utiliza para conectar tiene que admitir el cifrado. Su implantación también incluye un certificado propietario del servicio para que el controlador pueda verificar el servidor en el momento de la conexión.
Para obtener más información, consulte Cloud Databases FAQ de certificados.
Utilización del certificado propietario del servicio
- Copie la información del certificado del panel Puntos finales o del campo Base64 de la información de conexión.
- Si es necesario, decodifique la serie Base64 en texto.
- Guarde el certificado en un archivo. (Puede utilizar el nombre que se proporciona o un nombre de archivo de su elección).
- Proporcione al controlador o al cliente la vía de acceso al certificado.

Compatibilidad del complemento CLI con el certificado propietario del servicio
Puede mostrar el certificado decodificado para el despliegue con el plugin de CLI con el mandato ibmcloud cdb deployment-cacert "your-service-name"
. Decodifica la serie base64 a texto. Copie y guarde la salida del mandato
en un archivo y proporcione la vía de acceso del archivo al controlador.
Otros controladores
MySQL tiene una matriz de controladores de lenguaje. En la tabla siguiente se incluyen algunos de los más comunes. Consulte los Conectores y las API de MySQL para obtener más información.
Idioma | Controlador | Ejemplos |
---|---|---|
PHP | mysql |
Soporte de API para transacciones |
Ruby | ruby-mysql |
La API Ruby/MySQL |
C# | ODBC |
Guía del desarrollador deLiMySQL ODBC |
Go | mysql |
Go-MySQL-Driver |
Al conectarse a MySQL utilizando PHP, es necesario cambiar el plug-in auth de sha256_password
a mysql_native_password
.