Este tópico descreve como usar a API C do MySQL para conectar-se ao LindormTable e executar operações SQL em uma aplicação C ou C++.
Pré-requisitos
Antes de começar, verifique se:
A compatibilidade com MySQL está ativada na instância Lindorm. Para mais informações, consulte Ative o recurso de compatibilidade com MySQL.
O endereço IP do cliente consta na lista de permissões da instância Lindorm. Para mais detalhes, consulte Configure a whitelist.
Conecte-se ao LindormTable usando a API C do MySQL
Etapa 1: Instale a biblioteca da API C do MySQL
Instale o pacote mysql-devel, que fornece os cabeçalhos da API C do MySQL (incluindo mysql/mysql.h) e as bibliotecas cliente. O exemplo a seguir usa CentOS:
yum install mysql-devel
Após a instalação, o arquivo de cabeçalho fica em /usr/include/mysql/mysql.h e a biblioteca cliente é a libmysqlclient. Use #include "mysql/mysql.h" no arquivo de código-fonte para incluí-lo.
Etapa 2: Configure os parâmetros de conexão
Defina os parâmetros de conexão no arquivo de código-fonte C:
char lindorm_addr[] = "ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com";
char lindorm_user[] = "user";
char lindorm_password[] = "test";
char database[] = "default";
int lindorm_mysql_port = 33060;
A tabela a seguir descreve cada parâmetro:
|
Parâmetro |
Descrição |
|
|
Endpoint do LindormTable para MySQL. Para obtê-lo, consulte Visualize endpoints. Use o endpoint de VPC quando a aplicação for executada em uma instância ECS ou o endpoint de Internet para conexões via rede pública. |
|
|
Nome de usuário do LindormTable. Se esquecer a senha, redefina-a no sistema de gerenciamento do cluster. Para mais informações, consulte Gerencie usuários. |
|
|
Senha do LindormTable. |
|
|
Banco de dados de destino da conexão. O valor padrão é |
|
|
Porta do protocolo MySQL para o LindormTable. Valor fixo: |
Escolha o endpoint adequado conforme o ambiente de implantação:
Instância ECS (recomendado): Use uma conexão de Virtual Private Cloud (VPC) para garantir menor latência e maior segurança. Defina
lindorm_addrcom o endereço VPC compatível com MySQL.Aplicação local: Ative primeiro o acesso por endpoint público. No console, acesse Database Connections > Wide Table Engine e clique em Enable Public Endpoint. Em seguida, defina
lindorm_addrcom o endereço de Internet compatível com MySQL.
Etapa 3: Crie uma conexão e execute SQL
Chame mysql_real_connect() para estabelecer a conexão e use a sintaxe SQL de tabela ampla para executar operações. O exemplo a seguir conecta-se ao LindormTable e cria uma tabela:
MYSQL conn;
int res;
mysql_init(&conn);
// Create a connection
if (!mysql_real_connect(
&conn, // Connection handle
lindorm_addr, // Host: LindormTable endpoint
lindorm_user, // Username
lindorm_password, // Password
database, // Default database
lindorm_mysql_port, // Port: 33060
NULL, // Unix socket (not used)
0 // Client flags (none)
)) {
fprintf(stderr, "Failed to connect: %s\n", mysql_error(&conn));
mysql_close(&conn);
exit(1);
} else {
printf("conect lindorm successfully\n");
}
// Create a table
char create_table[] = "create table if not exists user_test(id int, name varchar,age int, primary key(id))";
res = mysql_query(&conn, create_table);
if (!res) {
printf("Table created successfully\n");
} else {
fprintf(stderr, "Create table error: %s\n", mysql_error(&conn));
mysql_close(&conn);
exit(1);
}
// ... run additional queries, then release resources
mysql_free_result(result);
mysql_close(&conn);
Etapa 4: Compile e execute
Use mysql_config para fornecer as flags corretas de compilação e vinculação:
gcc -o a.out $(mysql_config --cflags) demo.c $(mysql_config --libs)
./a.out
|
Flag |
Efeito |
|
|
Adiciona o caminho de inclusão para que o compilador localize |
|
|
Vincula a execução à biblioteca |
Dica: Se ocorrerem erros de vinculação comoundefined reference to 'mysql_init'ou similares, certifique-se de que$(mysql_config --libs)apareça após o arquivo de código-fonte no comando. O GCC resolve símbolos da esquerda para a direita.
Exemplo completo
O código a seguir demonstra as quatro operações: conexão, criação de tabela, inserção de dados e consulta.
#include <stdio.h>
#include "mysql/mysql.h"
int main() {
MYSQL conn;
int res;
MYSQL_RES *result;
MYSQL_ROW row;
mysql_init(&conn);
// Connection configuration
char lindorm_addr[] = "ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com"; // LindormTable endpoint for MySQL
char lindorm_user[] = "user"; // LindormTable username
char lindorm_password[] = "test"; // LindormTable password
char database[] = "default"; // Database to connect to
int lindorm_mysql_port = 33060; // MySQL protocol port (fixed at 33060)
// Create a connection
if (!mysql_real_connect(
&conn, // Connection handle
lindorm_addr, // Host
lindorm_user, // Username
lindorm_password, // Password
database, // Default database
lindorm_mysql_port, // Port
NULL, // Unix socket (not used)
0 // Client flags (none)
)) {
fprintf(stderr, "Failed to connect: %s\n", mysql_error(&conn));
mysql_close(&conn);
exit(1);
} else {
printf("conect lindorm successfully\n");
}
// Create a table
char create_table[] = "create table if not exists user_test(id int, name varchar,age int, primary key(id))";
res = mysql_query(&conn, create_table);
if (!res) {
printf("create table successfully\n");
} else {
fprintf(stderr, "create table Error: %s\n", mysql_error(&conn));
mysql_close(&conn);
exit(1);
}
// Insert data using upsert syntax
char insert_data[] = "upsert into user_test(id,name,age) values(3,'wangwu',23)";
res = mysql_query(&conn, insert_data);
if (!res) {
printf("insert data successfully\n");
} else {
fprintf(stderr, "insert data Error: %s\n", mysql_error(&conn));
mysql_close(&conn);
exit(1);
}
// Query data
char select_query[] = "select * from user_test";
if (mysql_query(&conn, select_query) != 0) {
fprintf(stderr, "select Error: %s\n", mysql_error(&conn));
mysql_close(&conn);
exit(1);
}
result = mysql_store_result(&conn);
if (result == NULL) {
fprintf(stderr, "store result Error: %s\n", mysql_error(&conn));
mysql_close(&conn);
exit(1);
}
while ((row = mysql_fetch_row(result)) != NULL) {
printf("name is %s , ", row[0]);
printf("age is %s\n", row[1]);
}
mysql_free_result(result);
mysql_close(&conn);
return 0;
}
Saída esperada:
conect lindorm successfully
create table successfully
insert data successfully
name is 3 , age is wangwu
O LindormTable usaupsert intoem vez do padrãoINSERT INTOpara gravar linhas. Essa é a sintaxe SQL de tabela ampla específica do LindormTable.
Próximos passos
Visualize endpoints — obtenha o endpoint de VPC ou Internet da instância
Gerencie usuários — redefina senhas ou gerencie acessos