Conectando um aplicativo externo

Os seus aplicativos e drivers usam sequências de conexões para fazer uma conexão com o IBM Cloud® Databases for MySQL. O serviço fornece sequências de conexões especificamente para drivers e aplicativos. As cadeias de conexão são exibidas no painel Endpoints da Visão geral da sua implantação e também podem ser recuperadas no plug-in CLI do Cloud Databases e na API do Cloud Databases.

As sequências de conexões podem ser usadas por qualquer uma das credenciais que você criou em sua implementação. Embora seja possível usar o usuário administrador para todas as conexões e aplicativos, pode ser melhor criar usuários a serem usados para as conexões específicas dos aplicativos. A documentação sobre a geração de credenciais está na página Criando usuários e obtendo sequências de conexões.

Conectando-se ao driver de uma linguagem

Todas as informações de que um driver precisa para fazer uma conexão com uma implementação estão na seção "mysql" das sequências de conexões. A tabela contém um detalhamento para referência.

informações de conexão mysql/URI
Nome do campo Index Descrição
Type Tipo de conexão - para MySQL, é "URI".
Scheme Esquema para um URI - para MySQL, é "mysql".
Path Caminho para um URI - para MySQL, é o nome do banco de dados. O padrão é ibmclouddb.
Authentication Username O nome do usuário usado para se conectar.
Authentication Password Uma senha para o usuário - pode ser mostrada como $PASSWORD.
Authentication Method Como a autenticação ocorre; a autenticação "direta" é manipulada pelo driver.
Hosts 0... Um nome do host e uma porta aos quais se conectar.
Composed 0... Um URI que combina Scheme (esquema), Authentication (autenticação), Host (host) e Path (caminho).
Certificate Name O nome alocado para o certificado proprietário do serviço para a implementação do banco de dados.
Certificate Base64 Uma versão do certificado codificada em Base64.
  • 0... indica uma ou mais dessas entradas em uma matriz..

Muitos drivers MySQL conseguem estabelecer uma conexão com uma implementação quando recebem a sequência de conexões formatada por URI encontrada no campo "composed" das informações de conexão. Por exemplo:

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 obter mais informações sobre estados ssl-mode, consulte Parâmetros de Conexão Adicionais.

O exemplo a seguir usa as informações de uma sequência de conexões e o driver Java jdbc para se conectar a um banco de dados.

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;
   }
}

O exemplo a seguir usa as informações de uma sequência de conexões e o driver Python pymysql para se conectar a um banco de dados. Este é apenas um exemplo simples de conexão, sem manipulação de erros ou lógica de nova tentativa e pode não ser adequado para a produção.

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()

Suporte ao TLS do driver e ao certificado proprietário do serviço

Todas as conexões com o Databases for MySQL são ativadas pelo TLS 1.2, portanto, o driver usado para a conexão precisa ser capaz de suportar criptografia. Sua implementação também vem com um certificado de propriedade do serviço para que o driver possa verificar o servidor na conexão.

Para obter mais informações, consulte Cloud Databases FAQ de Certificados.

Usando o certificado de propriedade do serviço

  1. Copie as informações do certificado a partir do painel Terminais ou do campo Base64 das informações de conexão.
  2. Se necessário, decodifique a sequência Base64 em texto.
  3. Salve o certificado em um arquivo. (É possível usar o nome de seu próprio arquivo).
  4. Forneça o caminho do certificado para o driver ou o cliente.

Painel de pontos de extremidade da
de pontos de extremidade da

Suporte ao plug-in da CLI para o certificado proprietário do serviço

É possível exibir o certificado decodificado para a sua implementação com o plug-in da CLI com o comando ibmcloud cdb deployment-cacert "your-service-name". Ele decodifica o Base64 em texto. Copie e salve a saída do comando em um arquivo e forneça o caminho do arquivo para o driver.

Outros drivers

O MySQL possui uma matriz de drivers de linguagem. A tabela abaixo abrange alguns dos mais comuns. Consulte o MySQL em Conexões e APIs para obter mais informações.

DriversMySQL
Idioma Driver Exemplos
PHP mysql Suporte API para transações
Ruby ruby-mysql A API Ruby/MySQL
C# ODBC Guia do desenvolvedor do ODBCLiMySQL
Acessar mysql Go-MySQL-Driver

Ao conectar-se ao MySQL usando PHP, é necessário mudar o plug-in de autenticação de sha256_password para mysql_native_password