连接到不同服务器上的 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_*
并将您的代码移植到mysqli
或PDO
。 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 服务器”)