8

我已经设置了一个带有安全组的 RDS 数据库实例,我在其中使用我的 EC2 弹性 IP 作为我的 CIDR/IP。我还将安全组与我的 EC2 相关联。

在此处输入图像描述

我在 EC2 实例上的安全组如下所示。我将 3306 端口之一与我的弹性 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

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

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

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

您似乎能够连接到 Amazon RDS 服务器。但是数据库不存在。如果我们尝试连接到全新安装的 mysql,则会显示类似的错误。它有零个数据库(除了information_schemaand mysql)。

于 2013-06-08T11:27:56.607 回答
5

首先,您不应该(永远)不再使用mysql_ * 扩展及其功能。它们已过时,已弃用,并将在接近版本的 php 中删除。使用mysqli_PDO。有关更多信息,请参阅php 文档中 mysql_connect 页面顶部的巨大红色警告

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

在 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)

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 回答
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 工作台,它不仅可以让您创建和管理数据库,还可以实时监控。您可以直接连接或使用 SSH

最后

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

没有任何理由您应该更改mysqli为,mysql因为它在 5.5.0 正式折旧

于 2013-06-08T13:38:28.727 回答
0

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

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

于 2013-06-01T19:38:59.920 回答