【问题标题】:PHP trying to connect to local mysql database instead of specified remote addressPHP试图连接到本地mysql数据库而不是指定的远程地址
【发布时间】:2016-07-12 01:12:42
【问题描述】:

我正在尝试连接到远程 MySQL 数据库。 MySQL 用户可以从任何 IP 地址访问。我在尝试连接的 Centos 6.8 VM 上拥有 root 权限。

是的,我已经用谷歌搜索过这个问题,但到目前为止没有任何效果。我是 PHP 新手,所以它可能很简单。它指的是'/var/lib/mysql/mysql.sock'的路径不存在,但我觉得它不应该寻找这个套接字,因为数据库不在本地主机上。我还仔细检查了我的 MySQL 用户是否具有权限。

我的代码:index.php

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
  <?php 
   $user="myUsername";
   $password="myPW";
   $database="myDB";
   mysql_connect('xxx.x.xx.xx:xxxx',$user,$password);
   @mysql_select_db($database) or die( mysql_error());
   $query="SELECT * from myTable";
   mysql_query($query);
   mysql_close();
  ?>
 </body>
</html>

我在页面上打印的错误:

无法通过套接字连接到本地 MySQL 服务器 '/var/lib/mysql/mysql.sock' (2)

我在 httpd/logs/error_log 中得到的错误:

[2016 年 7 月 8 日星期五 06:26:54] [错误] [客户端 xxx.x.x.xxx] PHP 警告: mysql_connect(): 无法连接到 'xxx.x.xx.xx' 上的 MySQL 服务器 (13) 在第 10 行的 /var/www/html/index.php 中

【问题讨论】:

  • 是否启用了 sql 安全模式? php.net/manual/en/ini.core.php#ini.sql.safe-mode
  • SQL safe mode中,host参数被忽略了。
  • 另外,您正在使用已弃用的 mysql connect .. 试试 mysqli?即&lt;?php$con = mysqli_connect("localhost","my_user","my_password","my_db");if (mysqli_connect_errno()){echo "Failed to connect to MySQL: " . mysqli_connect_error(); }?&gt;
  • 警告:如果您只是学习 PHP,请不要使用mysql_query 接口。它是如此可怕和危险,以至于它在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践
  • @tadman 感谢您提供此信息。 PDO 的错误报告稍好一些,它让我找到了解决方案。原来问题出在 selinux 上。

标签: php mysql database apache centos6


【解决方案1】:

我可以通过禁用 selinux 来使其正常工作。这适合我的测试情况,但对于生产来说,实际配置 selinux 以允许 PHP 连接到 MySQL 可能会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多