Я после этого учебника 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
Благодарим за помощь и время как первое. Ключ «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