“无法连接...通过套接字'/tmp/mysql.sock'”使用 C API mysql_real_connect() 但 /tmp/mysql.sock' 存在

Posted

技术标签:

【中文标题】“无法连接...通过套接字\'/tmp/mysql.sock\'”使用 C API mysql_real_connect() 但 /tmp/mysql.sock\' 存在【英文标题】:"Can't connect ... through socket '/tmp/mysql.sock' " using C API mysql_real_connect() but /tmp/mysql.sock' exists“无法连接...通过套接字'/tmp/mysql.sock'”使用 C API mysql_real_connect() 但 /tmp/mysql.sock' 存在 【发布时间】:2021-04-12 03:33:08 【问题描述】:

我正在运行 OS 11.1 Big Sur 并更新一个使用 mysql C API(不是 C 连接器)的目标 C 程序。 我可以使用

从命令行连接到本地 MySql 服务器

/usr/local/mysql/bin/mysql --user=root --password=aPassword

但是当我的软件尝试使用 mysql_real_connect(mSQLPtr, theHost, theLogin, thePass, theDatabase, 0, NULL, 0) 通过 C API 进行连接时;它失败了

无法连接到数据库:错误:无法连接到本地 MySQL 服务器通过套接字'/tmp/mysql.sock' (1)

我已经阅读了大量帖子来尝试修复它,例如停止和启动服务器,在启动服务器后检查 /tmp/mysql.sock 文件是否存在(并且它确实存在),并将 my.cnf 添加到 /etc 文件夹。它包含:

[mysqld]

socket=/tmp/mysql.sock

[客户]

socket=/tmp/mysql.sock

到目前为止没有任何效果。 谁能给点建议。

干杯 杰夫

【问题讨论】:

【参考方案1】:
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>

static char *host = "localhost";
static char *user = "user";
static char *pass = "password";
static char *db   = "mysql";
static char *socket = NULL;
unsigned int port = 3306;
unsigned int flags = 0;

/*
* brew install mysql-client
* export PATH=/usr/local/opt/mysql-client/bin:$PATH
* brew install mysql-connector-c++ (optional)
* gcc -o main $(mysql_config --cflags) main.c $(mysql_config --libs) -L/usr/local/opt/openssl/lib
*
* -L/usr/local/opt/openssl/lib is required if you get ld: library not found for -lssl error
*/
int main(int argc, char *argv[]) 
    MYSQL *con = mysql_init(NULL);
    
    if (!mysql_real_connect(con, host, user, pass, db, port, socket, flags)) 
        fprintf(stderr, "Error %s (%d)", mysql_error(con), mysql_errno(con));
        exit(1);
    
    
    printf("Connected\n");
    
    return EXIT_SUCCESS;

【讨论】:

以上是关于“无法连接...通过套接字'/tmp/mysql.sock'”使用 C API mysql_real_connect() 但 /tmp/mysql.sock' 存在的主要内容,如果未能解决你的问题,请参考以下文章