我使用mysql网站下载的这个教程http://www.clusterdb.com/mysql-cluster/creating-a-simple-cluster-on-a-single-linux-host:mysql-cluster-gpl-7.3.10-linux-glibc2.5-x86_64.tar.gz
我在Ubuntu 14.04LTS盒子上运行并运行,这意味着我可以使用每个端口上的终端登录到mysql-cluster,以确认它运行良好。由于上述PHP错误,当我尝试使用/etc/mysqlnd_ms_cfg.ini连接到它时,只是没有设法从PHP测试脚本连接到mysql-cluster。花了一整天的时间在互联网上搜索而没有解决这个问题,所以非常感谢任何帮助。
运行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的所有部分都有意思:
内容我的主机文件/ 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 :(得分: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
您的主机文件中没有&#34; myapp&#34; (上面第一个连接字符串中使用的主机名)。将此更改为127.0.0.1或您已定义其他的别名之一,而不是localhost,它应该按预期工作(假设这不仅仅是掩盖了其他地方的进一步配置问题)。< / p>