定期连接到 mysql 会导致php_network_getaddresses:getaddrinfo 失败

Connecting to mysql periodically causes php_network_getaddresses: getaddrinfo failed

提问人:MJDawson 提问时间:8/16/2023 最后编辑:MJDawson 更新时间:8/17/2023 访问量:97

问:

所以我做了很多网站,以前使用MSQL没有问题。但是,我最近重置了我的VPS,因此重新安装了它。我通常使用域连接到我的数据库。这个域的DNS配置了colouflare,我以前从未遇到过任何问题。

但是,现在,我可能会说每 5 次网站加载一次并使用 PHP 连接到数据库,它无法连接。

这是它得到的错误: 警告:mysqli_connect():php_network_getaddresses:getaddrinfo for db.domain.com 失败:名称在第 17 行的 /home/container/webroot/private/database.php 中无法解析

Fatal error: Uncaught mysqli_sql_exception: php_network_getaddresses: getaddrinfo for db.domain.com failed: Name does not resolve in /home/container/webroot/private/database.php:17 Stack trace: #0 /home/container/webroot/private/database.php(17): mysqli_connect() #1 /home/container/webroot/website/dashboard/site/payments/index.php(5): connectToDatabase() #2 {main} thrown in /home/container/webroot/private/database.php on line 17`

然后我刷新,它消失了,域指向正确的 ip 地址,但我不明白的是,当我只使用 ip 地址而不是域时,我没有问题。我不只是在域上使用 ip 的唯一原因是,不确定这是否很常见,与使用域相比,使用 ip 的速度非常慢。

这是database.php中的代码,但我在使用 wordpers 时也遇到了问题,因此它很可能与database.php文件无关。

<?php
function connectToDatabase() {
    ini_set('display_errors', 1); // This is just here to get the error
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

    $servername = "db.domain.com:3306";
    $username = "u1_Xm0swdMrNR";
    $password = ""; // Set obviously
    $dbname = ""; // Set obviously

    $conn = mysqli_connect($servername, $username, $password, $dbname);
    return $conn;
}
?>

这次和之前的唯一区别是我使用的是反向代理,但未设置为使用域 db.domain.com,所以我想不出为什么会是问题所在。更不用说我的朋友使用与我完全相同的 nginx 反向代理配置,并且使用域连接到数据库没有问题。

我还应该提到,我在 docker 容器中运行我的所有站点,但在主机上运行 mysql。

感谢所有帮助。谢谢。

编辑: 所以我做了一个测试脚本,这样我就可以可视化它。我在 docker 容器中的服务器上获取了脚本。当然,在对 MySQL 执行大约 4 次 ping 后,它会给出一个错误。我坚持在docker之外的服务器上,它工作没有任何问题。它在大约一秒钟内执行 100 次 ping,并且没有错误。然后我禁用了我的反向代理,但仍然不起作用,所以不是这样。我认为将我的脚本放在完全不同的服务器上并运行它。我等待它加载,它需要相当长的时间,但它设法执行 100 次 ping,没有错误,通过域连接。接下来,我尝试在其他 vps 上通过 docker 运行脚本,你知道吗,它可以工作。所以与连接到数据库的面板有关。db 在主机上,所以我非常困惑。我编写了一些 nodejs 代码并在 docker 上运行它,连接到数据库没有问题,并且它一直在 ping 它,没有任何麻烦。

php mysqli DNS

评论

0赞 Abdulla Nilam 8/16/2023
如果没有 PHP,请尝试使用上述凭据从控制台 (ssh) 进行连接。或者使用一些数据库应用程序(例如:Navicat)
2赞 M. Eriksson 8/16/2023
php_network_getaddresses: getaddrinfo for db.domain.com failed: Name does not resolve- 听起来像是DNS问题。可能是您的服务器与用于查找的 DNS(您的 Cloudflare DNS)存在一些问题。这很可能与PHP无关,因此您需要进行更多调查并尝试找到查找失败的地方。

答: 暂无答案