提问人:MJDawson 提问时间:8/16/2023 最后编辑:MJDawson 更新时间:8/17/2023 访问量:97
定期连接到 mysql 会导致php_network_getaddresses:getaddrinfo 失败
Connecting to mysql periodically causes php_network_getaddresses: getaddrinfo failed
问:
所以我做了很多网站,以前使用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_network_getaddresses: getaddrinfo for db.domain.com failed: Name does not resolve
- 听起来像是DNS问题。可能是您的服务器与用于查找的 DNS(您的 Cloudflare DNS)存在一些问题。这很可能与PHP无关,因此您需要进行更多调查并尝试找到查找失败的地方。