Conecte-se a uma instância do ApsaraDB RDS for MySQL a partir de uma aplicação Java, Python ou C usando o driver JDBC, a biblioteca PyMySQL ou a API MySQL C.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância do ApsaraDB RDS for MySQL em execução
Um banco de dados e uma conta criados na instância
O endereço IP do host da aplicação adicionado à lista de permissões da instância
Obtenha as informações de conexão
Obtenha o endpoint interno ou público e a porta da instância RDS antes de escrever o código de conexão.
Endpoint interno: use quando a aplicação for executada em uma instância do Elastic Compute Service (ECS) na mesma região e com o mesmo tipo de rede da instância RDS.
Endpoint público: use em todos os outros cenários, como conexões a partir de uma máquina local ou de uma instância ECS em outra região.
Para mais informações, consulte Visualizar e alterar os endpoints internos e públicos e os números de porta de uma instância do ApsaraDB RDS for MySQL.
Parâmetros de conexão
Os parâmetros a seguir aparecem em todos os códigos de exemplo deste tópico.
|
Parâmetro |
Descrição |
|
|
Endpoint interno ou público da instância RDS. |
|
|
Número da porta correspondente ao tipo de endpoint: porta interna para conexões internas; porta pública para conexões via Internet. |
|
|
Nome do banco de dados. |
|
|
Nome de usuário da conta usada para conectar-se à instância. |
|
|
Senha da conta. |
Conexão usando Java
O exemplo em Java usa JDBC e o driver mysql-connector-java para abrir uma conexão e executar uma consulta SELECT na tabela courses.
Instale o driver
Adicione a seguinte dependência ao arquivo pom.xml do projeto Maven:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
Código de exemplo
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DatabaseConnection {
public static void main(String args[]) {
// Replace the placeholders with your actual connection details
String connectionUrl = "jdbc:mysql://<Host>:<Port>/<myDatabase>";
ResultSet resultSet;
try (Connection connection = DriverManager.getConnection(connectionUrl, "<myUsername>", "<myPassword>");
Statement statement = connection.createStatement()) {
String selectSql = "SELECT * FROM `courses`";
resultSet = statement.executeQuery(selectSql);
while (resultSet.next()) {
System.out.println(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Saída esperada
Se a conexão for bem-sucedida e a tabela courses contiver dados, o valor da coluna name de cada linha será impresso no console:
Introduction to Cloud Computing
Database Fundamentals
Advanced Java Programming
Caso apareça um rastreamento de pilha de SQLException, consulte Solução de problemas.
Conexão usando Python
O exemplo em Python usa PyMySQL para estabelecer a conexão e executar uma consulta SELECT na tabela courses.
Instale o PyMySQL
Execute o comando apropriado para a versão do Python:
Python 3:
pip3 install PyMySQLPython 2:
pip install pymysql==0.9.3
Código de exemplo
import pymysql
connection = pymysql.connect(
host='<Host>',
port=<Port>,
user='<myUsername>',
passwd='<myPassword>',
db='<myDatabase>'
)
try:
with connection.cursor() as cursor:
sql = "SELECT * FROM `courses`"
cursor.execute(sql)
for result in cursor:
print(result)
except pymysql.err.OperationalError as e:
if e.args[0] == 1045:
print("Access denied: check your username and password.")
elif e.args[0] == 1049:
print("Unknown database: check the database name.")
else:
print(f"Connection error: {e}")
finally:
connection.close()
Saída esperada
Se a conexão for bem-sucedida e a tabela courses contiver dados, cada linha será impressa como uma tupla:
('Introduction to Cloud Computing',)
('Database Fundamentals',)
('Advanced Java Programming',)
Conexão usando C
O exemplo em C usa a API MySQL C para conectar-se e executar uma consulta SELECT na tabela courses.
Instale a biblioteca MySQL C
No CentOS, execute:
sudo yum install mysql-devel
Código de exemplo
#include <stdio.h>
#include <mysql.h>
#include <string.h>
int main(void)
{
MYSQL *t_mysql;
MYSQL_RES *res = NULL;
MYSQL_ROW row;
int rc, i, fields;
int rows;
char select[] = "select * from courses";
t_mysql = mysql_init(NULL);
if (NULL == t_mysql) {
printf("init failed\n");
return 1;
}
/* Replace the placeholders with your actual connection details */
if (NULL == mysql_real_connect(t_mysql, "<Host>", "<myUsername>", "<myPassword>",
"<myDatabase>", <Port>, NULL, 0)) {
printf("connect failed: %s\n", mysql_error(t_mysql));
return 1;
}
if (mysql_real_query(t_mysql, select, strlen(select)) != 0) {
printf("select failed: %s\n", mysql_error(t_mysql));
mysql_close(t_mysql);
return 1;
}
res = mysql_store_result(t_mysql);
if (NULL == res) {
printf("mysql_store_result(): %s\n", mysql_error(t_mysql));
mysql_close(t_mysql);
return 0;
}
fields = mysql_num_fields(res);
while ((row = mysql_fetch_row(res))) {
for (i = 0; i < fields; i++) {
printf("%s\t", row[i]);
}
printf("\n");
}
mysql_free_result(res);
mysql_close(t_mysql);
return 0;
}
Saída esperada
Se a conexão for bem-sucedida, cada linha da tabela courses será exibida com colunas separadas por tabulação:
Introduction to Cloud Computing
Database Fundamentals
Advanced Java Programming
O código de exemplo consulta uma tabela de cursos apenas como ilustração. Substitua a instrução SQL e o nome da tabela por consultas compatíveis com o esquema real do banco de dados.
Solução de problemas
Se a conexão falhar, verifique a mensagem de erro retornada pelo driver ou pela biblioteca. As causas mais frequentes incluem:
Endpoint ou porta incorretos: valide os valores conforme descrito em Obtenha as informações de conexão
Nome de usuário ou senha inválidos: revise as credenciais da conta
Endereço IP ausente na lista de permissões: adicione o IP do host da aplicação à lista de permissões da instância
Endpoint público desativado: ative o endpoint público no console caso a conexão seja externa à VPC
Para um guia completo de solução de problemas, acesse Resolver o problema de impossibilidade de conexão com uma instância RDS.
Próximos passos
Para conectar-se a partir de uma função serverless, configure o acesso à VPC e adicione o IP da função à lista de permissões do RDS. Consulte Acessar um banco de dados ApsaraDB RDS for MySQL na documentação do Function Compute.
Para mais exemplos de conexão em Python, visite o repositório start-fc-db no GitHub.