“无法连接...通过套接字'/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' 存在的主要内容,如果未能解决你的问题,请参考以下文章