You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MySQL C语言API连接Ubuntu 22.04上MySQL 8.0.36报错求助

解决MySQL C API连接时找不到socket的问题

问题原因

你的MySQL服务实际使用的socket路径并非C API默认查找的/tmp/mysql.sock,但命令行和Python客户端会自动读取MySQL配置文件(如/etc/mysql/my.cnf或~/.my.cnf)中的socket路径,因此能正常连接。

解决方案

1. 确认MySQL实际socket路径

先执行以下命令获取MySQL当前使用的socket路径:

mysql -u test -p -e "SHOW VARIABLES LIKE 'socket'"

输出示例:

+---------------+-----------------------------+
| Variable_name | Value                       |
+---------------+-----------------------------+
| socket        | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+

2. 方法一:在C代码中指定正确的socket路径

修改mysql_real_connect函数的第7个参数(socket路径)为上面获取到的实际路径:

int main() {
    MYSQL *conn;
    const char *server = "localhost";
    const char *user = "test";
    const char *password = "password";
    const char *database = "test1";
    // 替换为你的实际socket路径
    const char *socket_path = "/var/run/mysqld/mysqld.sock";
    
    conn = mysql_init(NULL);
    if (!mysql_real_connect(conn, server, user, password, database, 0, socket_path, 0)) {
        fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(conn));
        return 1;
    }
    return 0;
}

3. 方法二:改用TCP/IP连接(绕过socket)

将server改为127.0.0.1,并指定默认端口3306,强制使用TCP连接而非Unix socket:

int main() {
    MYSQL *conn;
    const char *server = "127.0.0.1";
    const char *user = "test";
    const char *password = "password";
    const char *database = "test1";
    unsigned int port = 3306;
    
    conn = mysql_init(NULL);
    if (!mysql_real_connect(conn, server, user, password, database, port, NULL, 0)) {
        fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(conn));
        return 1;
    }
    return 0;
}

4. 方法三:创建软链接到默认路径

如果不想修改代码,可通过软链接将实际socket路径指向C API默认查找的/tmp/mysql.sock:

sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
# 确保权限允许进程访问
sudo chown mysql:mysql /tmp/mysql.sock

内容的提问来源于stack exchange,提问作者Andy Sun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:20:16