Conecte-se ao LindormTable a partir de uma aplicação C ou C++ usando o driver Open Database Connectivity (ODBC) para MySQL.
Pré-requisitos
Antes de começar, verifique se:
A compatibilidade com MySQL está ativada na instância Lindorm. Consulte Ative o recurso de compatibilidade com MySQL.
O endereço IP do cliente foi adicionado à lista de permissões da instância. Consulte Configure whitelists.
Configure o driver
Etapa 1: Instale o driver ODBC para MySQL
Baixe e instale o driver ODBC para MySQL no site oficial do MySQL.
Etapa 2: Instale o unixODBC
Instale o unixODBC no Linux:
yum install unixODBC-devel
Etapa 3: Configure o driver no arquivo odbcinst.ini
Adicione a seguinte entrada ao arquivo odbcinst.ini.
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc8a.so
Setup = /usr/lib/libmyodbc8w.so
Driver64 = /usr/lib64/libmyodbc8a.so
Setup64 = /usr/lib64/libmyodbc8w.so
FileUsage = 1
|
Parâmetro |
Descrição |
|
|
Rótulo desta entrada de driver. Defina um valor personalizado. |
|
|
Caminho da biblioteca do driver ODBC de 32 bits. |
|
|
Caminho da biblioteca de instalação do driver ODBC de 32 bits. |
|
|
Caminho da biblioteca do driver ODBC de 64 bits. |
|
|
Caminho da biblioteca de instalação do driver ODBC de 64 bits. |
|
|
Valor fixo. Não altere. Valor: |
Etapa 4: Conecte-se ao LindormTable no código
Use SQLDriverConnect para estabelecer a conexão. O formato da string de conexão é:
DRIVER={MySQL};SERVER=<endpoint>;PORT=33060;DATABASE=<database>;USER=<username>;PASSWORD=<password>
|
Parâmetro |
Descrição |
|
|
Nome do driver configurado em |
|
|
Endpoint do LindormTable para MySQL. Consulte Visualize endpoints. |
|
|
Porta de acesso MySQL ao LindormTable. Valor fixo: |
|
|
Banco de dados de destino. Por padrão, o cliente conecta-se ao banco de dados |
|
|
Nome de usuário do LindormTable. Para redefinir a senha, consulte Gerencie usuários. |
|
|
Senha do LindormTable. |
Como escolher o endpoint correto para SERVER:
Instância ECS (VPC): Use o LindormTable VPC endpoint for MySQL para garantir menor latência e maior segurança.
Servidor local (Internet): Ative o endpoint público no console do Lindorm. Acesse Database Connections > Wide Table Engine e clique em Enable Public Endpoint na aba Wide Table Engine. Em seguida, utilize o LindormTable Internet endpoint for MySQL.
Etapa 5: Execute consultas
Após conectar-se com sucesso, aloque um identificador de instrução e execute SQL com SQLExecDirect. O exemplo abaixo executa show databases e imprime cada linha do resultado:
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
printf("Connection established. \n");
// Perform the query.
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
SQLExecDirect(stmt, (SQLCHAR*)"show databases", SQL_NTS);
// Obtain query results.
SQLCHAR result[50];
while (SQLFetch(stmt) == SQL_SUCCESS) {
SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
printf("database: %s\n", result);
}
// Release resources.
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
} else {
SQLCHAR sqlState[6];
SQLCHAR msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER nativeError;
SQLSMALLINT actualMsgLen;
SQLGetDiagRec(SQL_HANDLE_DBC, dbc, 1, sqlState, &nativeError, msg, sizeof(msg), &actualMsgLen);
printf("Connection failed: %s\n", msg);
}
// Release resources.
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
Exemplo completo
O programa a seguir inicializa o ambiente ODBC, conecta-se ao LindormTable, consulta todos os bancos de dados e libera os recursos.
Substitua os valores de espaço reservado na string de conexão pelo endpoint real, nome do banco de dados, nome de usuário e senha.
#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
int main() {
// Define connection handles.
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLRETURN ret;
// Initialize the ODBC environment.
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
// Allocate a connection handle and set the login timeout.
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLSetConnectAttr(dbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, SQL_IS_INTEGER);
// Connect to LindormTable.
// Replace the SERVER, DATABASE, USER, and PASSWORD values with your own.
ret = SQLDriverConnect(dbc, NULL, (SQLCHAR*)"DRIVER={MySQL};SERVER=ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com;PORT=33060;DATABASE=default;USER=user;PASSWORD=test", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) {
printf("Connection established. \n");
// Run a query.
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
SQLExecDirect(stmt, (SQLCHAR*)"show databases", SQL_NTS);
// Print each row.
SQLCHAR result[50];
while (SQLFetch(stmt) == SQL_SUCCESS) {
SQLGetData(stmt, 1, SQL_C_CHAR, result, sizeof(result), NULL);
printf("database: %s\n", result);
}
// Release statement resources.
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
} else {
SQLCHAR sqlState[6];
SQLCHAR msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER nativeError;
SQLSMALLINT actualMsgLen;
SQLGetDiagRec(SQL_HANDLE_DBC, dbc, 1, sqlState, &nativeError, msg, sizeof(msg), &actualMsgLen);
printf("Connection failed: %s\n", msg);
}
// Release connection and environment resources.
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
Se a instância tiver apenas o banco de dados padrão, a saída será:
Connection established.
database: default
database: information_schema