这里是一个详细示例,演示如何使用C语言结合HAProxy操作TiDB数据库。请确保你已经安装了libmysqlclient-dev库来进行MySQL客户端开发。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <mysql/mysql.h>
#define HAPROXY_IP "127.0.0.1"
#define HAPROXY_PORT 3306
int main() {
int sock;
struct sockaddr_in server_addr;
// 创建 socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
// 设置服务器地址
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(HAPROXY_PORT);
if (inet_pton(AF_INET, HAPROXY_IP, &(server_addr.sin_addr)) <= 0) {
perror("Invalid address/ Address not supported");
exit(EXIT_FAILURE);
}
// 连接到 HAProxy
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("Connection failed");
exit(EXIT_FAILURE);
}
// 初始化 MySQL 连接句柄
MYSQL *con = mysql_init(NULL);
// 连接到 TiDB
if (!mysql_real_connect(con, NULL, "username", "password", NULL, 0, NULL, 0)) {
fprintf(stderr, "Failed to connect to database: %s\n", mysql_error(con));
exit(EXIT_FAILURE);
}
// 执行 SQL 查询
const char *query = "SELECT * FROM mytable;";
if (mysql_query(con, query)) {
fprintf(stderr, "Query failed: %s\n", mysql_error(con));
exit(EXIT_FAILURE);
}
// 获取查询结果集
MYSQL_RES *result = mysql_store_result(con);
// 输出查询结果
printf("Data from TiDB:\n");
MYSQL_ROW row;
while ((row = mysql_fetch_row(result))) {
printf("%s\t%s\n", row[0], row[1]);
}
// 释放资源
mysql_free_result(result);
mysql_close(con);
// 关闭 socket 连接
close(sock);
return 0;
}
请注意,上述示例代码使用MySQL C API连接到HAProxy,并执行一个简单的SELECT查询。你需要根据实际情况修改代码中的用户名、密码和查询语句。
在编译时,你需要链接libmysqlclient库,请使用以下命令进行编译:
gcc -o tidb_example tidb_example.c -lmysqlclient
这将生成一个可执行文件”tidb_example”。运行该文件即可连接到HAProxy并操作TiDB数据库。
此示例仅用于演示目的,实际环境中你可能需要处理更多的错误检查和异常情况。希望对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问




