【问题标题】:Drupal Installation can't connect to MySQL server but it's thereDrupal 安装无法连接到 MySQL 服务器,但它在那里
【发布时间】:2015-05-17 17:00:45
【问题描述】:

我在安装 drupal 7 时遇到以下错误:

无法连接到您的数据库服务器。服务器报告以下消息:SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'myservername' (13)。

我在一台 Windows 服务器上运行 MySQL,在另一台 Linux 上运行 httpd。 MySQL 运行良好,在 httpd 服务器上我可以很好地连接到 MySQL,如下所示:

mysql -h dbserver -p --port=3001 -u drupal

同样,我可以运行 mysqli 和 pdo,并且从我的 httpd 连接也很好:

<?php
$servername = "dbserver";
$username = "drupal";
$password = "xxx";
$dbname = "drupal";
$port = 3001;

$conn = new mysqli($servername, $username, $password, $dbname, $port);

if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
$conn->close();

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname;port=$port", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
$conn=null;
 ?>

所以我的 Web 服务器或 php 或 mysql 上没有任何问题。它只是通过安装失败。我已经进入高级并输入了所有正确的详细信息。

有什么想法吗?我看了看,没有 apache 日志,我无法弄清楚如何在安装期间增加错误报告或找到它在哪里进行数据库连接检查..

谢谢。

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    你能确认你已经映射了 dbserver 的 ip。 转到终端并输入:“ping dbserver”,然后发布结果。

    已编辑:这种情况是由 linux 发行版的安全策略引起的,其中设置了 apache 服务器,不允许它连接到远程 mysql 实例。要解决这种情况,请转到终端并输入 sudo setenforce 0,这样 linux 就不会强制执行如此严格的网络服务器行为。

    【讨论】:

    • 是的,这行得通。就像在我的 mysqli 和 pdo 代码中一样,我使用了服务器名称,这很好。我也试过ip地址,但失败了。正如我所说,它可以从 Web 服务器上的代码运行,而不是从 Drupal 安装。我怀疑这是什么,但我追踪了“getConnection”方法,对于关键变量和目标变量,它们都是“默认”的,我原以为它们会是别的东西……
    • 简单地说,我认为它并没有那么远。在我的测试代码中,完成代码大约需要 5 秒,但在 Drupal 安装程序上,只要我单击按钮,它就会返回失败。
    • 好的,我现在要检查服务。请在您的终端上使用:service --status-all 并显示 mysql 条目。
    • 对不起,MySQL 运行在 Windows 服务器上,Web 服务器是 linux。但是我可以从我的 Linux 机器上用上面的代码连接就好了。知道如何在安装程序上输出调试吗?
    • 好的,在你的 linux 发行版中去终端并输入sudo setenforce 0,这样 linux 就不会强制执行如此严格的网络服务器行为。让我知道这对你有什么作用。
    【解决方案2】:

    假设您使用的是 RHEL/CentOS,我从 @alexbilbie here 找到了答案:

    setsebool -P httpd_can_network_connect_db 1
    

    来自the RHEL documentation

    禁用时,此布尔值会阻止 HTTP 脚本和模块启动与数据库服务器的连接。启用此布尔值以允许此访问。

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 1970-01-01
      • 2022-11-20
      • 1970-01-01
      • 2017-11-07
      • 2012-06-09
      • 1970-01-01
      • 2015-05-10
      • 2012-11-03
      相关资源
      最近更新 更多