次のコードを使用して、ローカルマシン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
%
(任意のホスト)からの接続を許可されたユーザーが必要です(詳細は manual を参照)現在の問題は最初の問題ですが、解決するとすぐに2番目の問題が発生します。
PHPを使用してリモートのMySQLサーバーに接続するのは非常に簡単です。
リモートサーバーにMySQLユーザーを作成します。
ユーザーに完全な特権を与えます。
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
このような問題を解決しました。私が学んだことは:
my.cnf
を編集し、bind-address = your.mysql.server.address
を[mysqld]
の下に設定する必要があります実行されているかどうかを確認します
mysql -u root -h your.mysql.server.address –p
%をドメインとして持つユーザー(usrなど)を作成し、問題のデータベースへのアクセスを許可します。
mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION;
ポート3306のファイアウォールを開きます(iptablesを使用できます。各ユーザーのポートを開くようにしてください。安全性が高い場合は、クライアントアドレスのみを許可してください)。
これで、mysqlサーバーをクライアントサーバーのphpスクリプトから接続できるようになります。
これはポスターの質問に対する答えではないかもしれませんが、これは私と同じ状況に直面している人々に役立つかもしれません:
クライアントには、ワイヤレスと通常の2つのネットワークカードがあります。サーバーへのpingは成功する可能性があります。ただし、telnet serverAddress 3306
は失敗します。そして文句を言うだろう
'xxx.xxx.xxx.xxx'のMySQLサーバーに接続できません(10060)
サーバーに接続しようとすると、通常のネットワークアダプターを禁止しました。そしてtelnet serverAddress 3306
機能します。MySQLサーバーに接続すると機能します。