簡體   English   中英

PHP 連接到遠程 MySQL 服務器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM