当我尝试通过远程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”拒绝访问 (使用密码:是)
远程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
答案 0 :(得分:0)
在继续之前,确认$ serverName变量确实是远程地址,主机名或IP地址。然后...
答案 1 :(得分:0)
您发布了实际代码吗?如果是这样,您忘记将字符串括在引号中:
$serverName = "remotehost"; // here I put the actual IP address
$userName = "myuser";
$passCode = "actualpassword";
mysql_connect($serverName,$userName,$passCode);
答案 2 :(得分:0)
您需要允许远程访问mySQL(在您拥有mySQL数据库的服务器上)。如果您使用的是CPanel或Plesk,则可以在控制面板中执行此操作。我有这个问题,显然mySQL默认配置只允许localhost。
答案 3 :(得分:0)
您需要为该用户授予访问权限,以便服务器的IP地址可以访问该用户。通常情况下,MySQL用户被锁定到localhost。
快速执行此操作的方法是查看表mysql.users
并查看该用户是否已锁定到本地主机。
有很多很好的GUI可以帮助添加主机,但最常用的手动方式是向数据库添加另一行。您可以将主机更改为'%'进行测试,但这会打开并且不太安全。
答案 4 :(得分: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
答案 5 :(得分:0)
我真的认为这不是GRANT问题,因为您在同一台服务器上使用相同的用户
您确定要定义好的$ serverName变量吗?这必须是REMOTE IP。
你可能有一个本地的mysql服务器也响应,这让你感到困惑。