我跟着這個教程http://www.clusterdb.com/mysql-cluster/creating-a-simple-cluster-on-a-single-linux-host使用從MySQL網站此下載:mysql的集羣 - GPL-7.3.10-Linux的glibc2.5-x86_64.tar.gzmysqlnd php_network_getaddresses:的getaddrinfo失敗:沒有這樣的主機被稱爲
我已經啓動並運行在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,它會以循環方式負載平衡到不同的主節點。
如果我在/etc/mysqlnd_ms_cfg.ini中將「myapp」鍵更改爲別的東西,我得到另外一個錯誤,說明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的 - 爲mysqlnd 20120503
- 整塊:版本5.0.11 mysqlnd-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
感謝您的幫助和時間。 pdo-string中的關鍵字「myapp」是對/etc/mysqlnd_ms_cfg.ini中的json對象的引用,其中包含有關可用節點的所有信息,例如:具有連接設置的節點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