web-dev-qa-db-ja.com

PHPを使用してリモートMySQLサーバーに接続する

次のコードを使用して、ローカルマシンvirtualhostからリモートMySQLサーバーに接続しようとしています。

$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") or die(mysql_error());
        mysql_select_db($dbname, $conn) or die(mysql_error());

私の問題は、ローカルに接続できず、エラーを受け取ることです:

'xxx.xxx.xxx.xxx'のMySQLサーバーに接続できません(10060)

これは、同じPHPファイルをサーバーにアップロードする場合には当てはまりません。データベースにまったく問題なくクエリを実行できます。

コマンドラインからも接続できませんが、cPanelにアクセスして、IPが誤って禁止される可能性を排除できます。

私のローカルサーバーは実行中PHP 5.2.9、リモートサーバー5.2.12

11
BenTheDesigner
  • サーバーのファイアウォールは、ポート3306で着信接続を有効にするように設定する必要があります
  • mySQLには、%(任意のホスト)からの接続を許可されたユーザーが必要です(詳細は manual を参照)

現在の問題は最初の問題ですが、解決するとすぐに2番目の問題が発生します。

18
Bozho

PHPを使用してリモートのMySQLサーバーに接続するのは非常に簡単です。

  1. リモートサーバーにMySQLユーザーを作成します。

  2. ユーザーに完全な特権を与えます。

  3. PHPコード(下記のサンプル)を使用してサーバーに接続します)

$link = mysql_connect('your_my_sql_servername or IP Address', 'new_user_which_u_created', 'password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}

echo 'Connected successfully';

mysql_select_db('sandsbtob',$link) or die ("could not open db".mysql_error());
// we connect to localhost at port 3306
3
Ajit Kumar KV

このような問題を解決しました。私が学んだことは:

  1. my.cnfを編集し、bind-address = your.mysql.server.address[mysqld]の下に設定する必要があります
  2. スキップネットワーキングフィールドをコメントアウト
  3. mysqldを再起動します
  4. 実行されているかどうかを確認します

    mysql -u root -h your.mysql.server.address –p 
    
  5. %をドメインとして持つユーザー(usrなど)を作成し、問題のデータベースへのアクセスを許可します。

    mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass';
    mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION;
    
  6. ポート3306のファイアウォールを開きます(iptablesを使用できます。各ユーザーのポートを開くようにしてください。安全性が高い場合は、クライアントアドレスのみを許可してください)。

  7. ファイアウォール/ iptablesを再起動します

これで、mysqlサーバーをクライアントサーバーのphpスクリプトから接続できるようになります。

2
Debmalya Sinha

これはポスターの質問に対する答えではないかもしれませんが、これは私と同じ状況に直面している人々に役立つかもしれません:

クライアントには、ワイヤレスと通常の2つのネットワークカードがあります。サーバーへのpingは成功する可能性があります。ただし、telnet serverAddress 3306は失敗します。そして文句を言うだろう

'xxx.xxx.xxx.xxx'のMySQLサーバーに接続できません(10060)

サーバーに接続しようとすると、通常のネットワークアダプターを禁止しました。そしてtelnet serverAddress 3306機能します。MySQLサーバーに接続すると機能します。

0
Shihe Zhang