可执行文件试图连接到错误的 MySQL 套接字文件位置

Executable trying to connect to wrong MySQL socket file location

我有一组可执行文件(特别是 BOINC 服务器可执行文件,但我认为这不重要),我试图在 Ubuntu 16.04 系统上 运行。这些可执行文件构建在不同的机器上,并使用构建在 RHEL 6.6 机器上的 MySQL 客户端库版本(发布计划是在 RHEL 6.6 机器上构建所有内容并一起部署,但当前那里没有构建可执行文件。

RHEL 6.6 盒子配置为将其 MySQL 套接字文件放在 /var/lib/mysql/mysql.sock

Ubuntu 16.04 框配置为将其 MySQL 套接字文件放在 /var/run/mysqld/mysqld.sock

当我尝试 运行 连接到 Ubuntu 16.04 机器上的数据库的可执行文件之一时,出现以下错误:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

错误直接来自 mysql_real_connect 函数。只有这些可执行文件给我那个错误。 mysql 推荐工作正常。 mysql_config --socket returns /var/run/mysqld/mysqld.sock,正如我所料。

我已经尝试了所有我能找到的关于编辑配置文件的建议。根据处理套接字文件位置的所有其他来源,我添加了一个 ~/.my.cnf 文件和一个 /etc/mysql/mysql.conf.d/client_socket.cnf 文件,它们在 [client] 部分中指定套接字文件位置。 None 它改变了可执行文件的行为;他们总是寻找 /var/lib/mysql/mysql.sock 就好像某些东西是硬编码的一样。不过,我找不到任何东西。

我已经为这个问题绞尽脑汁了一段时间,我无法弄清楚发生了什么。我最终打开了 /var/lib/mysql 的权限,并将真正的套接字文件符号链接到预期的位置,但这感觉像是一个 hack。这里发生了什么?为什么我的可执行文件似乎忽略了所有 MySQL 系统配置?解决这个问题的正确方法是什么?这实际上可以在某处进行硬编码吗?

我刚刚搜索了 BOINC 源代码树,倾向于认为它不是字面意义上的硬代码,而是在编译时固定的。看 https://github.com/BOINC/boinc/search?utf8=%E2%9C%93&q=mysql&type=

对我来说正确的解决方法是在你的机器上自己编译 BOINC 源代码树,使用 BOINC 开发人员准备的云图像 https://boinc.berkeley.edu/trac/wiki/CloudServer 或者查看 wiki.debian 上的说明.org/BOINC,其中我不确定它对 Ubuntu 的适应程度如何。