Я пытаюсь подключиться к ProxySQL из PHP с помощью mysqlnd, используя локальный сокет, но получаю
"Нет такого файла или каталога"
, так каксокета не будет. Тот же код может без проблем подключиться к сокету 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 version mysqlnd 5.0.12-dev - 20150407
ProxySQL version 2.0.6
Есть идеи, почему proxysql.sock не принимается mysqlnd?
ОБНОВЛЕНИЕ: Следуя предложенному ниже @ EternalHour, я также попытался переместить файл proxysql.sock из/ TMP, но, к сожалению, это не имеет значения. Я все еще получаю ту же ошибку.
EDIT (2019-10-08): Оказывается, эта проблема не имеет ничего общего с PHP, так как netcat также выдает ту же проблему, независимо от того, находятся ли файлы сокетов в /tmp или in / var / sockets /:
$ nc -U /tmp/proxysql.sock
Ncat: No such file or directory.
Из 3 узлов кластера ProxySQL, работающих на той же ОС, той же версии ядра, 1 имеет эту проблему, 2 других разрешают подключение к сокетуфайл в /tmp/proxsql.sock, хотя и там, иногда перезапуск ProxySQL приводит к тому, что файл сокета создается как закрытый (например, недоступный для других приложений)