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