2013-03-17 217 views
2

當我嘗試通過本地計算機的遠程MySQL服務器的外殼連接我可以成功連接:PHP連接到遠程MySQL服務器

> 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服務器的版本是52年5月1日,並在本地機器上的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 
+1

你說它是一個遠程服務器,但錯誤說本地主機。這是什麼? – Galen 2013-03-17 18:33:39

+0

這是我在本地機器上獲得的錯誤,當我嘗試連接到遠程服務器時 – Vasilis 2013-03-17 18:34:49

+0

myuser只允許從本地主機登錄。您需要更改/添加允許主持人的用戶。 – Bart 2013-03-17 18:48:26

回答

0

開始之前,確認該$ SERVERNAME變量確實是一個遠程地址,一個主機名或IP地址。然後...

+0

我嘗試通過嘗試通過成功的外殼連接 – Vasilis 2013-03-17 18:37:37

0

您發佈了實際的代碼嗎?如果是這樣,你忘了封閉字符串引號:

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

以確保上述我將編輯我的答案,我將它們包括在引號 – Vasilis 2013-03-17 18:37:55

0

你需要允許MySQL的遠程訪問(您擁有MySQL數據庫的服務器上)。如果您使用的是CPanel或Plesk,則可以在控制面板中執行此操作。我有這個問題,顯然mySQL的默認配置是隻允許本地主機。

0

您需要爲該用戶授予訪問權限,以便您的服務器的IP地址可以訪問該用戶。 MySQL用戶常常被鎖定到本地主機。

這樣做的一個快速方法是查看錶mysql.users並查看該用戶是否被鎖定到本地主機。

有很多不錯的GUI可以幫助添加主機,但最可能的手動方式是將另一行添加到數據庫。您可以將主機更改爲'%'進行測試,但這會打開並且不太安全。

+0

怎麼可能做到這一點? – Vasilis 2013-03-17 18:44:24

+0

我剛編輯我的回覆。你正在使用特定的GUI,phpMyAdmin還是隻是手動使用MySQL CLI? – gmartellino 2013-03-17 18:45:53

+0

我正在使用phpmyadmin gui,我將用戶主機指定爲%,但它不起作用。我可以通過mysql shell命令遠程連接,但不能從php – Vasilis 2013-03-17 18:46:31

0

使用SHOW GRANTS來查看您嘗試登錄的用戶是否有權從Web服務器的IP或域名進行連接。

mysql> SHOW GRANTS; 
+----------------------------------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected]                            | 
+----------------------------------------------------------------------------------------------------------------------------------------+ 
| 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服務器,它也在迴應你的問題。