mysqlnd php_network_getaddresses: сбой getaddrinfo: такой хост не известен

Я следовал этому уроку http://www.clusterdb.com/mysql-cluster/creating-a-simple-cluster-on-a-single-linux-host используя эту загрузку с сайта mysql: mysql-cluster-gpl-7.3.10-linux-glibc2.5-x86_64.tar.gz

У меня есть это и работает на коробке Ubuntu 14.04LTS, что означает, что я могу войти в MySQL кластер с помощью терминала на каждом порту, чтобы подтвердить, что он работает хорошо. Просто не удается подключиться из тестового сценария PHP к mysql-кластеру из-за вышеуказанной ошибки PHP, когда я пытаюсь подключиться к нему с помощью /etc/mysqlnd_ms_cfg.ini. Потратил целый день на поиск в интернете, не решая эту проблему, поэтому любая помощь очень ценится.

Запуск www.test.loc / test.php приводит к ошибке:

$pdo = new PDO("mysql:host=myapp;dbname=test", "root", "");
printf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
$result = $pdo->query("select * from assets");
var_dump($result->fetchAll());
die();

Принимая во внимание, что это работает www.test.loc / test.php:

$pdo = new PDO("mysql:unix_socket=/tmp/my.1.sock;dbname=test", "root", "");
printf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
$result = $pdo->query("select * from assets");
var_dump($result->fetchAll());
die();

Что подтверждает, что подключение к одному из узлов работает, так как возвращает результат строки.
Просто таким образом мы не используем mysqlnd_ms_cfg.ini, который бы загружал баланс другому мастеру в циклическом порядке.

Если я заменил ключ «myapp» на что-то другое в /etc/mysqlnd_ms_cfg.ini, я получу еще одну ошибку, сообщающую, что php не найдет файл, что будет означать, что путь к файлу правильный. Также проверил формат JSON для опечаток, но в соответствии с https://jsonformatter.curiousconcept.com/ это действительно.

Окружение:
/etc/mysqlnd_ms_cfg.ini

{
"myapp": {
"master": {
"master_1": {
"host": "localhost",
"db": "test",
"user": "root",
"password": "",
"port": "3306",
"socket": "\/tmp\/my.1.sock"},
"master_2": {
"host": "127.0.0.1",
"db": "test",
"user": "root",
"password": "",
"port": "3307"},
"master_3": {
"host": "127.0.0.1",
"db": "test",
"user": "root",
"password": "",
"port": "3308"}
},
"slave": {
},
"filters": {
"roundrobin": []
},
"failover": {
"strategy": "loop_before_master",
"remember_failed": true
}
}
}

Установленный php5-mysqlnd:

sudo apt-get install php5-mysqlnd

Добавил настройки в 10-mysqlnd.ini и перезагрузил apache2:

; configuration for php MySQL module
; priority=10
extension=mysqlnd.so
mysqlnd_ms.enable=1
mysqlnd_ms.force_config_usage=1
mysqlnd_ms.config_file=/etc/mysqlnd_ms_cfg.ini
;mysqlnd_ms.ini_file=/etc/mysqlnd_ms_cfg.ini

;Disabling built-in read-write splitting.
mysqlnd_ms.disable_rw_split=1

;Configure masters only.
;mysqlnd_ms.multi_master=1

Вывод PHPINFO: здесь проверено phpinfo () и весь раздел о mysqlnd:

  • Проанализированы дополнительные файлы .ini: /etc/php5/apache2/conf.d/10-mysqlnd.ini
  • Версия API клиента: mysqlnd 5.0.11-dev — 20120503
  • Весь блок для mysqlnd: версия mysqlnd 5.0.11-dev — 20120503
  • Загруженные плагины: mysqlnd

Содержимое моего файла hosts / etc / hosts:

127.0.0.1   localhost
127.0.1.1   dev-pc
127.0.0.1   www.test.loc

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

0

Решение

В вашем вопросе много несоответствующей информации.

Это не имеет ничего общего с кластеризацией.

Это не имеет ничего общего с PHP.

Это не имеет ничего общего с MySQL.

Важные биты:

new PDO("mysql:host=myapp;dbname=test", "root", "");

а также

$pdo = new PDO("mysql:unix_socket=/tmp/my.1.sock;dbname=test", "root", "");

а также

mysqlnd php_network_getaddresses: getaddrinfo failed: No such host is known

а также

127.0.0.1   localhost
127.0.1.1   dev-pc
127.0.0.1   www.test.loc

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

В вашем файле hosts нет записи для «myapp» (имя хоста используется в первой строке подключения выше). Измените это на 127.0.0.1 или один из псевдонимов, которые вы определили Другой чем localhost, и он должен работать как вы ожидаете (при условии, что это не просто скрывает дальнейшие проблемы конфигурации в другом месте).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]