无法使用Ec2和RDS选择Database Foo

时间:2013-06-01 15:29:47

标签: php mysql database amazon-ec2 rds

我已经设置了一个安全组的RDS数据库实例,我使用我的EC2弹性IP作为我的CIDR / IP。我还将安全组与我的EC2联系起来。

enter image description here

EC2实例上的我的安全组看起来像这样。我将3306端口中的一个与我的弹性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'。有什么想法吗?

编辑1

我刚刚将所有mysqli语句更改为mysql。但是连接仍然不成功,即无法找到数据库。

编辑2

以下是我的mysql权限的截图。

enter image description here

4 个答案:

答案 0 :(得分:5)

未知数据库'XXXX'表示无法访问数据库。这可能是因为:

  1. 服务器连接成功,但数据库不存在。尝试连接而不将数据库名称作为参数。然后运行查询show databases;。它将显示那里的所有数据库。

  2. 您正在连接到错误的服务器(您在其他服务器上存在其他数据库的数据库)。检查存在的数据库可以帮助您识别它是哪个服务器。

  3. 您似乎可以连接到Amazon RDS服务器。但数据库不在那里。如果我们尝试连接到mysql的全新安装,则会显示类似的错误。它没有数据库(information_schemamysql除外)。

答案 1 :(得分:5)

首先,你不应该(从不)再使用mysql_ *扩展及其功能。它们已过时,已弃用,将在近似版本中从php中删除。使用mysqli_PDO。有关详细信息,请参阅the huge red warning at the top of the mysql_connect page in the php docs

  • 检查您是否连接到正确的服务器

在ssh中连接到您的网络服务器,并使用本地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提示符下结束。如果这不起作用,您的问题在于您的网络配置,您的网络服务器无法连接到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)

主机中的内容很重要,您必须确保允许使用您的权限。如果一切正常并且仍然​​无效,请尝试编辑该用户的权限并将主机设置为'%'(表示允许任何内容)。如果它适用于它,则意味着在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权限再次创建它,然后重试,直到您复制所需的权限。

请记住删除该用户,您已完成。

答案 2 :(得分:2)

简介

错误Unknown database 'XXXX'表示数据库does not exist,与您的mysql权限无关。

关于RDS的phpMyAdmin

如果您是通过phpMyAdmin创建数据库的,那么您确定它已配置为连接到远程Amazon RDS instance,或者您正在使用localhost

请检查您的config.inc.php以确保其配置正确。您可以通过调用

添加远程服务器
$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 workbench,这不仅可以让您创建和管理您的数据库,还可以实时监控。您可以直接连接或使用SSH

<强>最后

  

我刚刚将所有mysqli语句更改为mysql。但是连接仍然没有成功,即无法找到数据库。

没有理由将mysqli更改为mysql,因为它Officially Depreciated at 5.5.0

答案 3 :(得分:0)

你需要使用mysqli_或mysql_,最好是第一个。交换它们是行不通的。

如果您收到未知数​​据库错误,您的连接成功,您正在尝试选择不存在的数据库,或者用户没有授权来访问。