【问题标题】:Connect Apache to remote MySQL [duplicate]将 Apache 连接到远程 MySQL [重复]
【发布时间】:2015-02-25 04:07:23
【问题描述】:

我在 ESXI 上的虚拟 VMWARE 测试环境中运行两台 Ubuntu 服务器 (ubuntu-14.10-server-amd64.)。

  1. 第一台服务器是后端 mysql 服务器。 IP:192.168.253.140
  2. 第二台服务器有一个带有 PHP 的 Apache2 服务来提供网页服务。 IP:192.168.253.143

1 MYSQL 服务器:192.168.253.140

A) 我配置了服务器,使 2 台特定机器的 2 个用户能够连接到特定数据库。

用户 'apache',让 apache 服务器连接到 mysql 服务器:

create user 'apache'@'192.168.253.143' IDENTIFIED BY    'abc123';     
grant    ALL PRIVILEGES ON Modulus_Docker_IW.* TO  'apache'@'192.168.253.143'    WITH GRANT OPTION;

用户 'pc',让我自己的电脑通过 WAMP 服务器 (PHP) 连接到远程 mysql 服务器。

create user 'pc'@'192.168.253.1' IDENTIFIED BY 'abc123';  
grant ALL PRIVILEGES ON Modulus_Docker_IW.* TO   'pc'@'192.168.253.1' WITH GRANT OPTION;

FLUSH PRIVILEGES; FLUSH HOSTS;

B) 我还配置了绑定 /etc/mysql/my.cnf 以便 mysql 服务器接受任何主机(不仅是本地主机)

bind-address = 0.0.0.0

2 APACHE 服务器:192.168.253.143

Apache 服务器已安装,我在服务器上上传了我的测试 php 页面。这是一个从 mysqlserver 上的数据库获取用户名和密码的简单页面。

我在 Dreamweaver 中与“pc”用户创建了一个连接,我可以检索一些数据,使用 WAMP 服务器处理 PHP。

如果我将文件上传到远程 Apache 服务器,我将连接字符串更改为 apache 用户并希望获得最好的结果。但我只是得到了一个没有任何内容的空白页面......

我必须在 Apache2 中做些什么来允许到 mysqlserver 的传出或传入连接吗?

PHP代码:

<?php 
$username = "pc";
$password = "abc123";
$host="192.168.253.140";
$database="Modulus_Docker_IW";

$link = mysql_connect($host, $username, $password);
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_select_db ($database, $link); 

$strSQL = "SELECT naam, paswoord FROM tblUsers ORDER BY naam ASC"; 
$result = mysql_query( $strSQL, $link );

mysql_close($link);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>
<p>echo 'Connected successfully';<p>
<?php 
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    echo "Naam :{$row['naam']}  <br> ".
         "--------------------------------<br>";
} 

 ?>
</body>
</html>

感谢您的 cmets。我现在从 apache php 获得一些调试信息。

致命错误:调用未定义的函数 mysql_connect() /var/www/html/modulus/connectHand.php 在第 7 行

好的,解决了:在PHP/Apache: PHP Fatal error: Call to undefined function mysql_connect()找到解决方案

我没有在 apache 服务器上安装“sudo apt-get install php5-mysql”。

感谢您的快速回复。

【问题讨论】:

  • PHP 中的空白页(“白屏死机”)意味着发生了致命的 500 错误,您应该查看 Apache 错误日志以了解详细信息。在开发和测试代码时,打开 PHP 的 display_errors 以便它们显示在屏幕上,但在生产中禁用它。在脚本顶部 error_reporting(E_ALL); ini_set('display_errors', 1); 或 php.ini 中 error_reporting = E_ALLdisplay_errors = On 但同样不要忘记在生产中关闭 display_errors。
  • 现在在 /etc/php5/apache2/php.init ?? error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED and display_errors = On
  • 将其更改为 E_ALL,这样就不会抑制通知和弃用。然后查看 /var/log/apache2/error_log 或该 Ubuntu 服务器上的任何错误日志路径。某些事情未能导致空白屏幕。请注意,您必须在更改 php.ini 后重新启动 Apache
  • 好的,所以没有安装 mysql 扩展。您需要 apt-get install php5-mysqlnd 但请注意 mysql_*() 函数已弃用。你应该开始学习使用mysqli_*() 或 PDO。
  • 是的,这就是问题所在...感谢您的快速回复

标签: php mysql apache ubuntu


【解决方案1】:

好的解决了:在PHP/Apache上找到了解决方法:PHP Fatal error: Call to undefined function mysql_connect()

我没有在 apache 服务器上安装“sudo apt-get install php5-mysql”。

感谢您的快速回复。

【讨论】:

    【解决方案2】:

    检查 MySQL 服务器上的 iptables 以确保它没有阻塞连接。默认端口是 TCP/3306。此外,检查 MySQL 配置以确保允许来自 localhost 之外的连接。

    【讨论】:

    • Mysql 服务器允许来自外部的连接。如何确保 apache 服务器上的 3306 端口没有被阻塞?
    【解决方案3】:

    另一个建议:在您的代码中,您要在遍历结果之前关闭 MySQL 连接。也许尝试将mysql_close($link) 放在 PHP 文件的末尾?

    【讨论】:

      【解决方案4】:

      MySQL 用户与 Unix 系统用户不同。仅仅因为您在数据库中创建了一个名为"apache" 的用户,这并不意味着PHP 程序正在使用该用户来连接它。如果您在这里向我们展示您的PHP 代码会更好。

      【讨论】:

      • 感谢您的快速回复。我用在我自己的本地机器上工作的代码更新了帖子。
      • 好的。您的 PHP 代码用于连接数据库的用户名是“pc”(在您的第一行中)。您需要将其更改为“apache”(或您在 MySQL 中创建的用户名)。
      • 抱歉,我现在看到您确实更改了上传到远程服务器的文件中的用户名。
      • @Ipapp:我的评论只是为了撤回我之前的建议,因为我后来看到她已经按照我的建议作为解决方案。
      猜你喜欢
      • 1970-01-01
      • 2013-08-10
      • 2014-06-29
      • 2020-03-31
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多