2013-06-01 7 views
8

CIDR/IPとしてEC2 Elastic IPを使用するセキュリティグループを使用してRDSデータベースインスタンスをセットアップしました。私はまた、セキュリティグループを私のEC2に関連付けました。 EC2インスタンス上のEc2とRDSを使用してデータベースFooを選択できません

enter image description here

私のセキュリティグループは、このようになります。私は3306ポートの1つをElastic IPに関連付けました。

enter image description here

私は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'です。何か案は?

EDIT 1

私はちょうどmysqlにすべてmysqli文を変更しました。しかし、接続はまだ成功していません。つまり、データベースが見つかりません。ここで

EDIT 2

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

enter image description here

答えて

5

不明なデータベース「XXXX」は、データベースにアクセスできなかったことを示します。これは、次の理由で発生します。

  1. サーバーは正常に接続されていますが、データベースは存在しません。データベース名をパラメータとして指定せずに接続してください。次に、クエリshow databases;を実行します。そこにはすべてのデータベースが表示されます。

  2. 間違ったサーバーに接続しています(別のデータベースを他のサーバー上に追加しました)。存在するデータベースを確認することで、それがどのサーバーであるかを特定するのに役立ちます。

Amazon RDSサーバーに接続できるようです。しかしデータベースはそこにはありません。 mysqlの新規インストールに接続しようとすると、同様のエラーが表示されます。データベースはゼロです(information_schemaおよびmysql以外)。

+0

これは本当に良いフィードバックです。クエリ 'show databases'を実行し、データベース' information_schema'、 'performance_schema'、' mysql'、 'ckdb'をリストアップしました。しかし、 'phpMyAdmin'には、上記の2つのスキーマと' test 'と 'test1'のような' mysql'と 'ckdb'というものだけがあります。 'phpMyAdmin'で作成した' test'と 'test1'テーブルをどのように読み書きするのですか? –

+0

Amazon RDSの代わりにphpMyAdmin経由でローカルマシンにデータベースを作成したようです。 Amazon RDSを外部データベースとして使用するようにphpMyAdminを設定する必要があります。このチュートリアルの設定方法については、http:// blog.benkuhl.com/2010/12/how-to-remote-manage-an-amazon-rds-instance-with-phpmyadmin/'を参照してください。そして、データベースselectboxでクエリを実行するデータベースについて言及する必要があります。 – user568109

0

あなたは、好ましくは、まず、mysqli_またはmysql_を使用する必要があります。それを交換することはできません。

不明なデータベースエラーが発生した場合は、接続に成功したか、存在しないデータベースを選択しようとしているか、アクセス権が与えられていません。

+0

こんにちは、ありがとうございました。私はすべてをmysqlに切り替えましたが、まだ動作していません。データベースは間違いなく終了し、私は大丈夫だと思うmysql権限を投稿しました。他のアイデア? –

+0

まだ動作していないので、mysqli_にスイッチバックすることをお勧めします。順方向になり、mysql_は償却された機能です。 MySQlで大文字と小文字が区別される場合は、データベース名とユーザーが正しいかどうかを確認してください。 'INFORMATION_SCHEMA'データベースに接続できますか?あるいは、dbを指定せずに接続し、次に 'USE'を実行してdbを選択しますか? – Stoleg

2

はじめ

エラーUnknown database 'XXXX'は、データベースdoes not existを意味し、あなたのmysql権限とは何の関係もありません。RDS

phpMyAdminにあなたはphpMyAdminを経由してデータベースを作成した場合、あなたはそれがリモートAmazon RDS instanceに接続するように構成されたことを確認しているか、あなたのlocalhost

に敷居作業していることを確認するために、config.inc.phpをご確認ください適切に構成されています。あなたはより良いDB管理あなたはまた、あなたが作成し、データベースを疥癬することができないだろうが、あなたはまた、リアルタイムに監視することができMySQL workbenchを使用することができます

$i++; // This would add the new servers 
$cfg['Servers'][$i]['host'] = 'XXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com'; 
$cfg['Servers'][$i]['port'] = '3306'; 
$cfg['Servers'][$i]['socket'] = ''; 
$cfg['Servers'][$i]['connect_type'] = 'tcp'; 
$cfg['Servers'][$i]['extension'] = 'mysql'; 
$cfg['Servers'][$i]['compress'] = TRUE; 
$cfg['Servers'][$i]['auth_type'] = 'config'; 
$cfg['Servers'][$i]['user'] = 'XXXXXXX'; 
$cfg['Servers'][$i]['password'] = 'XXXXXXX'; 

を呼び出すことによって、あなたのリモートサーバーを追加することができます。あなたは、私はMySQLへのすべてのmysqliのステートメントを変更した

最後に

SSHを直接接続するか、使用することができます。しかし、接続はまだ成功していません。つまり、データベースが見つかりません。

は、それがOfficially Depreciated at 5.5.0

5

まず第一に、あなたは(決して)mysql_を使うべきではありませんので、あなたがmysqlmysqliを変更する必要がまったく理由はありませんがあります*拡張機能とその機能。彼らは時代遅れで、非難され、近いバージョンでPHPから削除されます。 mysqli_、またはPDOを使用してください。詳細はthe huge red warning at the top of the mysql_connect page in the php docsを参照してください。あなたはSSHでのウェブサーバーに右サーバー

Connectに接続し、ルートとしてデータベースサーバーに接続するためにローカルmysqlクライアントを使用し

  • チェック(あなたがのためにパスワードを要求されます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プロンプトが表示されます。これでうまくいかなかった場合、ネットワーク設定に問題があります。ウェブサーバーをmysqlサーバーに接続できません(ポートの開口部を確認してください)。

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

    リストでデータベース名を見ることができない場合は、これはphpmyadminの中にあなたの参照が正しくないサーバーを意味問題のデータベースがサーバー上に存在することを確認してください1; 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) 
    

    ホストにあるものは重要であり、あなたの権限で許可されていることを確認する必要があります。すべてがOKでまだ動作していない場合は、そのユーザーの特権を編集し、HOSTを '%'に設定してください(何かが許可されていることを意味します)。それが動作すると、mysqlの権限でHOSTが間違って設定されていることを意味します。

    • ユーザーが問題のデータベースを確認できるかどうかを確認します。特定のユーザーと接続すると、 "show databases"には、このユーザーが見る権限があるデータベースのみが一覧表示されます。

      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権限で再度作成し、必要な権限を複製するまで再試行してください。

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

関連する問題