可执行文件试图连接到错误的 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 的适应程度如何。
我有一组可执行文件(特别是 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 的适应程度如何。