3

リモート 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 サーバーのバージョンは 5.1.52 で、ローカル マシンの PHP のバージョンは 5.3.10-1ubuntu3.4 です。

同様の質問を見つけましたが、答えは私の問題を解決しません: php を使用してリモート 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
4

5 に答える 5

0

mySQLへのリモートアクセスを許可する必要があります(mySQL dbがあるサーバー上)。CPanel または Plesk を使用している場合は、コントロール パネルで実行できます。どうやらmySQLのデフォルト設定はlocalhostのみを許可するようになっています。

于 2013-03-17T18:42:42.320 に答える
0

そのユーザーがサーバーの IP アドレスからアクセスできるようにするには、アクセスを許可する必要があります。多くの場合、MySQL ユーザーはローカルホストにロックダウンされています。

これを行う簡単な方法は、テーブルmysql.usersを見て、そのユーザーがローカルホストにロックダウンされているかどうかを確認することです。

ホストの追加に役立つ便利な GUI はたくさんありますが、最も手動で行う方法は、DB に別の行を追加することです。ホストを '%' に変更してテストすることもできますが、それでは問題が発生し、安全性が低下します。

于 2013-03-17T18:43:07.417 に答える
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)

コマンドを使用して、いわばWeb ユーザーGRANTにリモート アクセスを許可します。このようなもの。

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

正確な構文については、MySQL 5.1 マニュアルを参照してください。MySQL 5.1 マニュアル: GRANT

于 2014-05-30T13:55:13.910 に答える
0

続行する前に、$serverName 変数が実際にリモート アドレス (ホスト名または IP アドレス) であることを確認してください。それで...

  • SQL サーバーでリモート アクセスが有効になっていることを確認してください。詳細については、次のリンクを参照してください: http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html
  • リモート MySQL サーバーに、ローカル IP アドレスのアクセスを許可するように指示したことを確認してください。
  • ユーザー名とパスワードが正しいことを確認してください。
于 2013-03-17T18:35:26.767 に答える
0

実際のコードを投稿しましたか?もしそうなら、文字列を引用符で囲むのを忘れました:

$serverName = "remotehost"; // here I put the actual IP address
$userName   = "myuser";
$passCode   = "actualpassword";
mysql_connect($serverName,$userName,$passCode);
于 2013-03-17T18:36:33.793 に答える