php - MySQL 数据库接受远程连接,但不接受来自 PHP 的连接

标签 php mysql sql database ubuntu

所以我在专用服务器上设置了MySQL服务器。我尝试使用此 PHP 脚本连接到它。

<?php
$servername = "******";
$username = "******";
$password = "******";

// Create connection
$conn = new mysqli($servername, $username, $password);

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

是的,我的脚本中的 ***** 已替换为正确的信息。

连接被拒绝并出现此错误

Connection failed: Can't connect to MySQL server on '66.45.230.186' (111)

所以我从另一台主机尝试了它,我使用了 http://www.rainbowspuppiessunshine.com/tools/dbtest/index.php

从这里我也得到了一个错误:

Lost connection to MySQL server at 'reading initial communication packet', system error: 111

所以我尝试从我的 VPS 连接到 MySQL。我在上面安装了 MySQL,并通过用户“root”和“steam”建立了连接,并且能够访问我的数据库并通过它添加表。

VPS 与我的专用服务器(运行我的 MySQL 服务器)由同一台主机托管,因此我想可能是因为它位于同一 LAN 上,这可能就是它允许连接的原因。所以我决定在我的本地机器上安装一个 MySQL 客户端(HeidiSQL 9.1)。我能够从我的本地计算机(距离我的专用服务器 500 英里)与该客户端建立连接

所以我完全不知道为什么我能够从另一个 MySQL 客户端远程连接到 MySQL,但我无法通过任何 PHP 脚本连接到它。我真的不知道有多大区别。

MySQL 服务器是全新安装的(除了设置远程连接权限和添加包含两个表的数据库之外)。它在 Ubuntu 14.04 上运行

+------------------+-------------------------------------------+---------------+
| user             | password                                  | host          |
+------------------+-------------------------------------------+---------------+
| root             | *367201834FD28DD7137E8947B4E1A1F5CAC4BBB4 | localhost     |
| root             | *367201834FD28DD7137E8947B4E1A1F5CAC4BBB4 | myserver      |
| root             | *367201834FD28DD7137E8947B4E1A1F5CAC4BBB4 | 127.0.0.1     |
| root             | *367201834FD28DD7137E8947B4E1A1F5CAC4BBB4 | ::1           |
| debian-sys-maint | *AA9A40B349EDF9989A118FEFCF255353033F4A6D | localhost     |
| steam            | *367201834FD28DD7137E8947B4E1A1F5CAC4BBB4 | **.**.***.*** |
| steam            | *367201834FD28DD7137E8947B4E1A1F5CAC4BBB4 | %             |
| root             | *367201834FD28DD7137E8947B4E1A1F5CAC4BBB4 | %             |
+------------------+-------------------------------------------+---------------+

... 已被编辑以隐藏 IP

最佳答案

首先,请检查 php 中对 mysql 和 mysqli 的支持。在您的网站位置(/var/www/html)创建index.php,以下是文件内容。

<?php
 echo phpinfo();
?>

在浏览器( http://localhost/index.php )访问index.php,检查mysql和mysqli项是否存在。 enter image description here

如果没有,请重新安装 php mysql 支持,在您的情况下使用 apt-get 命令来安装它们。

其次,请登录您的mysql并检查远程连接状态。

// in command line
mysql -u your user -p your password
// execute following sql
select user,password,host from mysql.user;

结果如下 enter image description here

然后请检查主机栏,如果该栏值为特定的ip或主机名(localhost、192.168.xxx.xxx等),请更改为任何可以连接的客户端。 假设您的数据库连接信息如下所示

database  demo
user  demo
password demo
//execute the sql to change
grant all on demo.* to demo@'%' identified by 'demo';
flush privileges;

完成上述步骤后,请再次尝试从 php 连接 mysql。

关于php - MySQL 数据库接受远程连接,但不接受来自 PHP 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125406/

相关文章:

php - 模型在 MVC 编程中应该走多远?

php - 从 PHP 连接到 MySQL 嵌入式数据库

php - 有多个 OR 子句会减慢查询速度吗

sql - PostgreSQL json路径表达式以查找具有特定键的第一个数组元素

mysql - 单独运行查询时返回结果,将其添加到更大的查询时返回不明确的引用

PHP 显示 01 而不是 1

mysql - MySQL 中的设置选项查询是什么?

php - 设置电话号码格式

mysql - SQL 查询通过关联模型选择用户的 friend

sql - 查找字符串中是否有 6 位数字