【问题标题】:mysqlnd php_network_getaddresses: getaddrinfo failed: No such host is knownmysqlnd php_network_getaddresses:getaddrinfo 失败:不知道这样的主机
【发布时间】:2015-10-22 08:27:12
【问题描述】:

我按照本教程 http://www.clusterdb.com/mysql-cluster/creating-a-simple-cluster-on-a-single-linux-host 使用从 mysql 站点下载的以下内容:mysql-cluster-gpl-7.3.10-linux-glibc2.5-x86_64.tar.gz

我在 Ubuntu 14.04LTS 机器上启动并运行了它,这意味着我可以使用每个端口上的终端登录到 mysql-cluster 以确认它运行良好。当我尝试使用 /etc/mysqlnd_ms_cfg.ini 连接到它时,由于上述 PHP 错误,只是无法从 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,它会以循环方式负载平衡到不同的 master。

如果我将“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 的部分都有含义:

  • 解析的其他 .ini 文件:/etc/php5/apache2/conf.d/10-mysqlnd.ini
  • 客户端 API 版本:mysqlnd 5.0.11-dev - 20120503
  • mysqlnd 的整个块:版本 mysqlnd 5.0.11-dev - 20120503
  • 加载的插件: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

【问题讨论】:

    标签: php mysql cluster-computing getaddrinfo mysqlnd


    【解决方案1】:

    您的问题中有很多不相关的信息。

    这与集群无关。

    这与 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 或您定义的别名之一 other 而不是 localhost,它应该可以按您的预期工作(假设这不仅仅是在其他地方掩盖了进一步的配置问题)。

    【讨论】:

    • 首先感谢您的帮助和时间。 pdo-string 中的键“myapp”是对 /etc/mysqlnd_ms_cfg.ini 中的 json 对象的引用,其中包含有关可用节点的所有信息,例如:master_1、master_2 等,它们具有与其连接设置。还有php.net/manual/en/function.mysqlnd-ms-set-qos.php(在参数、连接下)和blog.ulf-wendel.de/2011/… 以类似的方式执行此操作。这样查询请求将作为负载平衡分散到不同的可用节点。
    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多