[英]PHP connection to remote MySQL server
當我嘗試通過遠程 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 connected to remote mysql database using php
我真的很感激一些幫助!
編輯:
php -i | grep "mysql"
的輸出php -i | grep "mysql"
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
在繼續之前,確認 $serverName 變量確實是一個遠程地址,主機名或 IP 地址。 然后...
你發布了實際的代碼嗎? 如果是這樣,您忘記將字符串括在引號中:
$serverName = "remotehost"; // here I put the actual IP address
$userName = "myuser";
$passCode = "actualpassword";
mysql_connect($serverName,$userName,$passCode);
您需要允許遠程訪問 mySQL(在您擁有 mySQL 數據庫的服務器上)。 如果您使用的是 CPanel 或 Plesk,您可以在控制面板中進行操作。 我有這個問題,顯然 mySQL 默認配置是只允許本地主機。
您需要為該用戶授予訪問權限,以便您的服務器的 IP 地址可以訪問該用戶。 通常,MySQL 用戶被鎖定到本地主機。
一個快速的方法是查看表mysql.users
並查看該用戶是否被鎖定到本地主機。
有許多不錯的 GUI 可以幫助添加主機,但最可能的手動方法是向數據庫添加另一行。 您可以將主機更改為 '%' 進行測試,但這會打開並不太安全。
使用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 手冊:GRANT
我真的認為這不是GRANT問題,因為您在同一台服務器上使用相同的用戶
您確定要定義好的$ serverName變量嗎? 這必須是REMOTE IP。
你可能有一個本地的mysql服務器,它也響應,這讓你感到困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.