连接到不同服务器上的mysql

4

我正在尝试从另一台服务器连接到MySQL数据库服务器。以下是两台服务器的配置:

服务器 1: 我安装了带有PHP和Apache服务的xampp,并且它具有以下IP地址172.x1.x1.x1。

服务器 2: 我安装了MySQL,它具有以下IP地址172.x1.x1.x2。

以下是我使用的连接脚本来连接数据库:

<?php
    //Database connection constants
    define("DATABASE_HOST", "172.x1.x1.x2");
    define("DATABASE_USERNAME", "root");
    define("DATABASE_PASSWORD", "");
    define("DATABASE_NAME", "management");
?>

以上脚本保存在名为app_config.php的文件中,位于服务器1上。以下脚本保存在名为connect.php的文件中,也位于服务器1上。

<?php
require 'app_config.php';
$connect_error = 'Sorry we\'experiencing connection problems.';
$table_error = 'Table not found';
mysql_connect(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD)
or die($connect_error);

mysql_select_db(DATABASE_NAME) or die($table_error);

现在当我尝试连接时,出现以下错误:

警告:mysql_connect() [function.mysql-connect]:主机“hr1.saqa.co.za”不被允许连接到此MySQL服务器。文件路径为C:\xampp\htdocs\scripts\functions\database\connect.php,行号为4

致命错误:在C:\xampp\htdocs\scripts\functions\database\connect.php的第5行中调用未定义的函数handle_error()

如果你能帮助我的话,那就太好了。


5
你应该停止使用 mysql_* 函数,并将你的代码迁移到 mysqliPDOmysql 已经过时,并且很可能在下一个主要版本中彻底删除。 - Vlad Preda
试试这个吧 :)https://dev59.com/SHRA5IYBdhLWcg3wyRN7 - Ivo Pereira
您还需要设置允许用户从远程IP地址连接到数据库,或者设置特定的IP地址。 - EM-Creations
@VladPreda 我最终会放弃mysql_*,但我还是php的新手,我正在阅读的书仍然使用那个脚本。 - user1783675
2个回答

3

由于您的数据库服务器与php / apache服务器不同,因此在mysql-php连接字符串中需要将主机名指定为172.x1.x1.x2

还要确保mysql用户root具有远程连接权限。否则,mysql服务器将不允许您的root用户从服务器1远程登录。

您可以从mysql.user表中确认这一点。

mysql> select Host,User from user where User = "root";
+------------+------+
| Host       | User |
+------------+------+
| 127.0.0.1  | root |
| ::1        | root |
| localhost  | root |
| sgeorge-mn | root |
| %          | root |
+------------+------+
4 rows in set (0.01 sec)

%代表任何主机。

要创建具有远程连接权限的用户,请使用以下mysql查询:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your_password';

我已经使用正确的IP地址更新了我的脚本,但仍然遇到相同的错误。 - user1783675
我应该在 SQL 数据库还是 Web 服务器上运行这个 SQL 命令? - user1783675
谢谢Suku,让我纠正我的代码,我会更新并告诉你现在是否有效。 - user1783675
@Suku,请看一下我对脚本所做的更新。我确信叫做管理的数据库存在。 - user1783675
这并不是真正的错误,我收到了“找不到表”的消息,意味着它无法连接到名为management的数据库。我已经更新了脚本,请查看一下。 - user1783675
显示剩余6条评论

2

1) 确保防火墙允许 MySQL。

2) 确保允许 MySQL 远程连接权限。


嗨,我关闭了防火墙并在数据库服务器上打开了3306端口。 - user1783675
如果您确定已允许MySQL远程连接权限,请在IP地址上放置端口地址(172.x1.x1.x2:3306),并检查php.ini文件中的MySQL配置。 - mohammad mohsenipur
1
是的!我检查了两次以确保权限被允许。现在它连接到数据库,但找不到名为management的数据库。 - user1783675
获取 $conn=mysql_connect 的结果并将其用于 mysql_select_db(DATABASE_NAME,$conn) 或 die($table_error);,并检查您的 MySQL 用户访问权限设置是否正确。不要使用 root 用户进行测试,因为此用户可以访问所有数据库。 - mohammad mohsenipur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接