连接到不同服务器上的 mysql

Posted

技术标签:

【中文标题】连接到不同服务器上的 mysql【英文标题】:Connect to mysql on a different server 【发布时间】:2013-01-04 12:03:02 【问题描述】:

我正在尝试从另一台服务器连接到 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) 或死($table_error); ?> 现在当我尝试连接时出现以下错误

警告:mysql_connect() [function.mysql-connect]: Host 'hr1.saqa.co.za' is not allowed to connect to this MySQL server in C:\xampp\htdocs\scripts\functions\database\connect .php 在第 4 行

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

如果你们能帮助我,那就太棒了。

【问题讨论】:

您应该停止使用mysql_* 并将您的代码移植到mysqliPDO。 mysql 已过时,很可能会在下一个主要版本中完全删除。 试试这个 :) ***.com/questions/822902/… 您还需要设置它以便允许用户从远程IP地址连接到数据库,或者设置一个特定的IP地址。 @VladPreda 我最终会离开 mysql_* 但我还是 php 新手,我正在阅读的书仍然使用该脚本。 【参考方案1】:

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

还要确保mysql用户root有远程连接权限。其他明智的 mysql-server 将不允许您的 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 更新了我的脚本,但我仍然收到同样的错误 查看我关于mysql.user的回答部分 再解释一下,这些服务器都运行windows server 2008 r2 我是在sql数据库还是webserver中运行这个sql命令? 当然,从数据库服务器。从网络服务器你不能运行sql 查询。 ;-)。也不要为这个以% 为主机的新root 用户提供GRANT PRIVILEGES【参考方案2】:

1)确保防火墙允许 MySQL。

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

【讨论】:

您好,我删除了防火墙并在数据库服务器上打开了 3306 端口 如果您确定 MySQL 远程连接权限 Allowed 。将端口地址放在 ip (172.x1.x1.x2:3306) 上并检查 php.ini 中的 MySQL 配置 是的!我检查了两次以确保允许。现在它连接到数据库,但没有找到名为管理的数据库 获取 $conn=mysql_connect 的结果并在 mysql_select_db(DATABASE_NAME,$conn) 或 die($table_error) 上使用它;并检查您的 MySQL 用户访问权限设置是否正确,因为该用户访问所有数据库,所以不要由 root 用户测试

以上是关于连接到不同服务器上的 mysql的主要内容,如果未能解决你的问题,请参考以下文章

无法使用php连接错误连接到mysql:无法连接到'localhost'(10061)上的MySQL服务器[重复]

Django docker 容器无法连接到 mysql 容器,出现错误“无法连接到 'db' (111) 上的 MySQL 服务器”)

从远程服务器连接到 Amazon EC2 上的 mysql

连接到另一个IP(服务器)上的MySQL,PHP [重复]

无法连接到 localhost (0) 上的 mysql 服务器

安装后无法连接到“localhost”(10061)上的 MySQL 服务器