2015-10-22 63 views
0

我跟着這個教程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 

回答

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 

您的主機文件中沒有「myapp」(上面第一個連接字符串中使用的主機名)條目。將其更改爲127.0.0.1或您已定義的其中一個別名其他而不是localhost,並且它應該按照您的預期工作(假設這不僅僅是覆蓋其他配置問題)。

+0

感謝您的幫助和時間。 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

相關問題