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

1 ответ

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

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

Это не имеет ничего общего с 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, и он должен работать так, как вы ожидаете (при условии, что это не просто покрывает другие проблемы конфигурации в других местах).

Другие вопросы по тегам