PHP连接到远程MySQL服务器

问题描述 投票:3回答:6

当我尝试通过远程MySQL服务器上的本地机器的shell连接时,我可以成功连接:

> mysql -h remotehost -u myuser -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

但是当我尝试使用PHP脚本连接时

$serverName = "remotehost"; // here I put the actual IP address
$userName = "myuser";
$passCode = "actualpassword";
mysql_connect($serverName,$userName,$passCode);

我收到以下错误

警告:mysql_connect():用户'myuser'@'localhost'拒绝访问(使用密码:YES)

远程MySQL服务器版本为5.1.52,本地机器中的PHP版本为5.3.10-1ubuntu3.4

我发现了一个类似的问题,但答案并没有解决我的问题:problem connecting to remote mysql database using php

我真的很感激一些帮助!

编辑:

php -i | grep "mysql"的输出

/etc/php5/cli/conf.d/mysql.ini,

/etc/php5/cli/conf.d/mysqli.ini,

/etc/php5/cli/conf.d/pdo_mysql.ini

mysql

MYSQL_SOCKET => /var/run/mysqld/mysqld.sock

MYSQL_INCLUDE => -I/usr/include/mysql

MYSQL_LIBS => -L/usr/lib/i386-linux-gnu -lmysqlclient_r

mysql.allow_local_infile => On => On

mysql.allow_persistent => On => On

mysql.connect_timeout => 60 => 60

mysql.default_host => no value => no value

mysql.default_password => no value => no value

mysql.default_port => no value => no value

mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

mysql.default_user => no value => no value

mysql.max_links => Unlimited => Unlimited

mysql.max_persistent => Unlimited => Unlimited

mysql.trace_mode => Off => Off

mysqli

MYSQLI_SOCKET => /var/run/mysqld/mysqld.sock

mysqli.allow_local_infile => On => On

mysqli.allow_persistent => On => On

mysqli.default_host => no value => no value

mysqli.default_port => 3306 => 3306

mysqli.default_pw => no value => no value

mysqli.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

mysqli.default_user => no value => no value

mysqli.max_links => Unlimited => Unlimited

mysqli.max_persistent => Unlimited => Unlimited

mysqli.reconnect => Off => Off

PDO drivers => mysql

pdo_mysql

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock
php mysql pdo
6个回答
0
投票

在继续之前,确认$ serverName变量确实是远程地址,主机名或IP地址。然后...


0
投票

你发布了实际代码吗?如果是这样,您忘记将字符串括在引号中:

$serverName = "remotehost"; // here I put the actual IP address
$userName   = "myuser";
$passCode   = "actualpassword";
mysql_connect($serverName,$userName,$passCode);

0
投票

您需要允许远程访问mySQL(在您拥有mySQL db的服务器上)。如果您使用的是CPanel或Plesk,则可以在控制面板中执行此操作。我有这个问题,显然mySQL默认配置只允许localhost。


0
投票

您需要为该用户授予访问权限,以便服务器的IP地址可以访问该用户。通常,MySQL用户被锁定到localhost。

快速执行此操作的方法是查看表mysql.users并查看该用户是否已锁定到localhost。

有许多很好的GUI可以帮助添加主机,但最常用的手动方式是向数据库添加另一行。您可以将主机更改为'%'进行测试,但这会打开并且不太安全。


0
投票

使用SHOW GRANTS查看您尝试登录的用户是否有权从Web服务器的IP或域名进行连接。

mysql> SHOW GRANTS;
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6381FFD48B21F7ED17AE12AF4F8BE4458F4B0AC7' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

使用GRANT命令可以远程访问您的Web用户,可以这么说。像这样的东西。

mysql> GRANT SELECT ON database.table TO 'myuser'@'web_server_IP_or_domain_name' IDENTIFIED BY 'actualPassword';

参考MySQL 5.1手册以获得准确的语法。 MySQL 5.1 Manual: GRANT


0
投票

我真的认为这不是GRANT问题,因为您在同一台服务器上使用相同的用户

您确定要定义好的$ serverName变量吗?这必须是REMOTE IP。

你可能有一个本地的mysql服务器,它也响应,这让你感到困惑。

© www.soinside.com 2019 - 2024. All rights reserved.