8

EC2 Elastic IP を CIDR/IP として使用するセキュリティ グループで RDS データベース インスタンスをセットアップしました。また、セキュリティ グループを EC2 に関連付けました。

ここに画像の説明を入力

EC2 インスタンスのセキュリティ グループは次のようになります。3306 ポートの 1 つを Elastic IP に関連付けました。

ここに画像の説明を入力

phpMyAdmin でデータベースとテーブルを作成し、以下のコードを使用してすべての値を出力してテストしようとしています。

<?php


    // set database server access variables:
    $host = "XXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com";
    $user = "XXXXXXX";
    $pass = "XXXXXXXX";
    $db = "XXXXXXX";    
    $con = mysql_connect($host, $user, $pass, $db);

// Check connection
if (mysql_connect_error())
  {
  echo "Failed to connect to MySQL: " . mysql_connect_error();
  }else { echo "You have connected successfully!";
}


 $result = mysql_query($con, "SELECT * FROM `XXXXX` LIMIT 0, 30 ");

echo "<p>starting again..</p>";

while($row = mysql_fetch_assoc($result)){
    //iterate over all the fields
    foreach($row as $key => $val){
        //generate output
        echo $key . ": " . $val . "<BR />";
    }
}
    mysql_close($connection);

?>

私が得ているエラーはですUnknown database 'XXXX'。何か案は?

編集1

すべてのmysqliステートメントを に変更しましたmysql。しかし、接続はまだ成功していません。つまり、データベースが見つかりません。

編集2

これは私のmysql権限のスクリーンショットです。

ここに画像の説明を入力

4

4 に答える 4

5

まず、mysql_ * 拡張機能とその機能を (絶対に) 使用しないでください。それらは時代遅れで非推奨であり、近いバージョンで php から削除されます。mysqli_またはPDOを使用します。詳細については、php ドキュメントの mysql_connect ページの上部にある大きな赤い警告を参照してください。

  • 正しいサーバーに接続していることを確認してください

ssh で Web サーバーに接続し、ローカル mysql クライアントを使用して root としてデータベース サーバーに接続します (root ユーザーのパスワードを求められます)。

$ mysql -uroot -p -hXXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 100530
Server version: 5.1.66-0+squeeze1 (Debian)

[...]

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

これが機能する場合、mysql プロンプトが表示されるはずです。これが機能しない場合、問題はネットワーク構成にあり、Web サーバーが mysql サーバーに接続できません (ポートの開口部を確認してください)。

  • 問題のデータベースがサーバーに存在することを確認してください

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | [... db names ...] |
    +--------------------+
    X rows in set (0.00 sec)
    
    mysql>
    

リストにデータベース名が表示されない場合は、phpmyadmin で表示されるサーバーが正しいサーバーではないことを意味します。phpmyadmin の設定を確認してください。

  • cli mysql クライアントを使用して、このユーザーに接続できるかどうかを確認します。接続行でデータベースを指定していないことに注意してください。

    // close the root connection
    mysql> quit
    Bye
    // connect using your specific user, replace USERNAME with your db user (and type its password when asked)
    $ mysql -uUSERNAME -p
    Enter password:
    
    [...]
    
    mysql> 
    

これが失敗してプロンプトが表示されない場合は、パーミッションが存在しないか、このユーザーが指定したホストから接続できないことが原因である可能性があります。mysql が表示するエラー メッセージを見てください。何かのようなもの!

ERROR 1045 (28000): Access denied for user 'USERNAME'@'HOST' (using password: NO)

HOST に含まれるものは重要であり、それが自分の特権で許可されていることを確認する必要があります。すべてに問題がなく、それでも機能しない場合は、そのユーザーの権限を編集して、HOST を「%」に設定してみてください (何でも許可されていることを意味します)。それで動作する場合は、HOST が mysql の権限で正しく構成されていないことを意味します。

  • ユーザーが問題のデータベースを表示できるかどうかを確認します。特定のユーザーと接続すると、「データベースの表示」は、このユーザーが表示する権限を持つデータベースのみを一覧表示します。

    mysql > show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | [... db names ...] |
    +--------------------+
    X rows in set (0.00 sec)
    
    mysql>
    

リストにデータベースが表示されない場合は、ユーザーの権限が間違っているか、このデータベースに設定されていないことを意味します。

ここでのすべての手順が正常に機能する場合は、おそらく、php コードにエラーがあることを意味します。ホスト、パスワード、ユーザー名などを再確認してください。

  • 権限のどの部分が間違っているのか本当にわからない場合は、ダミーのユーザーを作成して、任意のホストからのすべての権限を取得してみてください。

    $ mysql -uroot -p -hXXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com
    Enter password:
    mysql > GRANT ALL ON yourdbname.* to 'testuser'@'%' IDENTIFIED BY 'dummypassword';
    mysql > quit
    Bye
    // note that I give the password in the prompt directly, to make sure this isn't an input error just in case
    $ mysql -utestuser -pdummypassword
    mysql >
    

このユーザーを作成して接続できるようになったら、php コードを使用して接続を試みます。これが機能したら、( を使用して) ユーザーを削除DROP USER 'testuser'し、より制限された HOST 権限でユーザーを再度作成し、必要なアクセス許可が複製されるまで再試行します。

そのユーザーを忘れずに削除してください。

于 2013-06-09T10:52:25.377 に答える
0

mysqli_ または mysql_ を使用する必要がありますが、できれば最初のものを使用してください。それらを交換しても機能しません。

不明なデータベース エラーが発生している場合、接続は成功しています。存在しないデータベースを選択しようとしているか、ユーザーにアクセス権限がありません。

于 2013-06-01T19:38:59.920 に答える