通过套接字连接到ProxySQL-“无此文件或目录”

时间:2019-10-07 17:40:43

标签: proxysql

我正在尝试使用本地套接字通过mysqlnd从PHP连接到ProxySQL,但是我得到了

  

“没有这样的文件或目录”

,因为套接字不存在。相同的代码可以毫无问题地连接到mysql套接字。

基本上,我正在复制以下内容: https://www.percona.com/blog/2017/09/19/proxysql-improves-mysql-ssl-connections/

<?php
$i = 10000;
$user = 'percona';
$pass = 'percona';
while($i>=0) {
 $mysqli = mysqli_init();

 // ProxySQL
 $link = mysqli_real_connect($mysqli, "localhost",      $user, $pass, "", 6033, "/tmp/proxysql.sock")
 or die(mysqli_connect_error());
 $info = mysqli_get_host_info($mysqli);
 $i--;
 mysqli_close($mysqli);
 unset($mysqli);
}
?>

抛出:

mysqli_real_connect(): (HY000/2002): No such file or directory

套接字文件(/tmp/proxysql.sock)实际上存在:

$ ls -all /tmp
total 12
drwxrwxrwt. 11 root     root      4096 Oct  7 17:33 .
dr-xr-xr-x. 28 root     root      4096 Sep 20 17:42 ..
drwxrwxrwt.  2 root     root         6 Aug  8 02:40 .font-unix
drwxrwxrwt.  2 root     root         6 Aug  8 02:40 .ICE-unix
srwxrwxrwx   1 proxysql proxysql     0 Oct  7 17:11 proxysql.sock

我可以使用mysql客户端通过它进行连接:

$ mysql -u myuser -p --socket /tmp/proxysql.sock --prompt='ProxySQLClient> '

如果在上面的PHP代码中我将套接字文件替换为MySQL套接字,则可以正常工作。只是proxysql.sock无法与mysqlnd一起使用。

我正在使用: mysqlnd版本 mysqlnd 5.0.12-dev-20150407
ProxySQL版本 2.0.6

有人知道为什么mysqlnd不接受proxysql.sock吗?

更新:遵循下面@EternalHour的建议,我也尝试将proxysql.sock文件移出/ tmp,但是不幸的是,这没有什么不同。我仍然收到相同的错误。

编辑(2019-10-08):事实证明此问题与PHP无关,因为netcat也会抛出相同的问题,无论套接字文件位于/ tmp还是/ var / sockets /中:

$ nc -U /tmp/proxysql.sock
Ncat: No such file or directory.

在相同操作系统,相同内核版本上运行的ProxySQL群集的3个节点中,有1个存在此问题,其他2个允许连接到/tmp/proxsql.sock中的套接字文件,尽管有时也存在重新启动ProxySQL会导致套接字文件被创建为私有文件(例如,其他应用程序不可用)

2 个答案:

答案 0 :(得分:0)

许多MySQL客户端对localhost一词有特殊的处理。 localhost并不意味着“使用解析器来解析localhost并通过TCP连接”,而是“使用默认路径上的unix域套接字”来使用TCP来使用127.0.0.1。如果proxySQL还提供了unix域套接字,请提供该路径。

答案 1 :(得分:0)

对不起,每个人都很难解决这个问题-这完全是我的错。

当我在ProxySQL Admin中更改套接字文件的位置时,我正在使用以下内容

更新global_variables设置variable_value ='0.0.0.0:6033; /tmp/proxysql.sock'其中variable_name ='mysql-interfaces'; 将MYSQL变量保存到磁盘;

是的,这是“ /tmp/proxysql.sock”末尾的空格。 当我将其更改为其他位置时,我只重写了文件的前半部分(文件夹),而不重写了文件名,因此我只是不断复制空间,因此始终找不到文件或目录...

问题解决了!

很抱歉