2015-10-22 3 views
0

Я после этого учебника http://www.clusterdb.com/mysql-cluster/creating-a-simple-cluster-on-a-single-linux-host с помощью этого скачать с сайта тузд: MySQL-кластер-GPL-7.3.10-Linux-glibc2.5-x86_64.tar.gzmysqlnd php_network_getaddresses: getaddrinfo не удалось: Нет такого хоста не известно

У меня это работает и работает в ящике 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 output: проверено phpinfo() и вся секция о mysqlnd есть смысл:

  • Дополнительные файлы .ini разобраны: /etc/php5/apache2/conf.d/10-mysqlnd.ini
  • Client API версии: mysqlnd 5.0.11-DEV - 20120503
  • весь блок для mysqlnd : Версия 5.0.11 mysqlnd-DEV - 20120503
  • Loaded плагинов: mysqlnd

Содержание мои хосты файл/и т.д./хосты:

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

Благодарим за помощь и время как первое. Ключ «myapp» в pdo-строке является ссылкой на объект json внутри /etc/mysqlnd_ms_cfg.ini, который содержит всю информацию о доступных узлах, например: master_1, master_2 и т. Д., Которые имеют настройки подключения к нему. Также http://php.net/manual/en/function.mysqlnd-ms-set-qos.php (по параметру, подключению) и http://blog.ulf-wendel.de/2011/php-and-mysql -cluster-load-balancing-without-rw-split/делает это аналогичным образом. Таким образом, запросы запросов будут распространяться на разные доступные узлы в качестве балансировки нагрузки. – Salvatore

Смежные вопросы