首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Ec2和RDS选择数据库Foo

问无法使用Ec2和RDS选择数据库Foo
EN

Stack Overflow用户
提问于 2013-06-01 15:29:47
回答 4查看 2.8K关注 0票数 8

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

​

​

我在EC2实例上的安全组如下所示。我将3306端口中的一个与我的弹性IP相关联。

​

​

我已经在phpMyAdmin中创建了一个数据库和一个表,并试图通过使用下面的代码打印出所有的值来测试它:

代码语言:javascript
复制
<?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特权的屏幕截图。

​

​

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-08 11:27:56

未知数据库“XXXX”意味着无法访问数据库。这可能是因为:

  1. 服务器正在成功连接,但不存在数据库。尝试连接,而不将数据库名称作为参数。然后运行查询show databases;。它将显示那里的所有数据库。
  2. 您正在连接到错误的服务器(您在其他服务器上添加了数据库)。检查当前的数据库可以帮助您识别它是哪一台服务器。

您似乎能够连接到Amazon服务器。但数据库不在那里。如果我们尝试连接到mysql的新安装,类似的错误就会显示出来。它有零个数据库( information_schema和mysql除外)。

票数 5
EN

Stack Overflow用户

发布于 2013-06-09 10:52:25

首先,您不应该(永远)使用_*扩展及其函数。它们已经过时,已经过时,并将在接近的版本中从php中删除。使用_或PDO。有关更多信息,请参见在php文档中连接页面。

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

在ssh中连接到您的user服务器,并使用本地mysql客户端作为root连接到数据库服务器(将向您询问root用户的密码):

代码语言:javascript
复制
$ 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提示符下结束。如果这不起作用,您的问题在于您的网络配置,您的the服务器无法连接到mysql服务器(检查端口空缺)。

  • 确保服务器上存在有问题的数据库 mysql>显示数据库;+db名称.在集合(0.00秒) mysql>中.++

如果在列表中看不到数据库名,这意味着您在phpmyadmin中看到的服务器不是正确的;请检查phpmyadmin设置。

  • 检查是否可以使用cli mysql客户端与此用户连接。请注意,我没有在连接线上指定数据库。 //关闭根连接mysql>退出Bye / connect使用特定用户,用db用户替换用户名(并在询问时键入其密码)$ mysql -uUSERNAME -p输入密码:.mysql>

如果此操作失败,并且无法到达提示符,则可能是因为权限不存在,也可能是因为此用户无法从您指定的主机连接。查看mysql将显示的错误消息;类似于!

代码语言:javascript
复制
ERROR 1045 (28000): Access denied for user 'USERNAME'@'HOST' (using password: NO)

主机中的内容很重要,您必须确保它在您的特权中是允许的。如果一切看起来都正常,但仍然不能工作,请尝试编辑该用户的特权,并将主机设置为'%‘(意味着允许任何事情)。如果使用它,就意味着主机被错误地配置为mysql的特权。

  • 检查用户是否可以看到有问题的数据库。当您与特定用户连接时,“显示数据库”将只列出此用户要查看的数据库。 mysql >显示数据库;+db名称.在集合(0.00秒) mysql>中.++

如果无法在列表中看到数据库,这意味着用户的权限为该数据库设置错误/未设置。

如果这里的每个步骤运行良好,这可能意味着您的php代码中有一个错误,请再次检查主机、密码、用户名、.

  • 如果您真的无法确定哪些部分的特权是错误的,请尝试创建一个虚拟用户将从任何主机获得所有权限: $ mysql -uroot -p输入密码: mysql >授予您的-uroot上的所有密码。*输入由‘dummypassword’标识的'testuser'@'%‘;mysql >退出Bye //注意,我在提示中直接给出密码,以确保这不是一个输入错误,以防$ mysql -utestuser -pdummypassword mysql >。

一旦您创建了这个用户并可以连接到它,请尝试使用您的php代码连接到它。完成此操作后,删除用户(使用DROP USER 'testuser'),使用更有限的主机权限再次创建它,然后再试一次,直到复制所需的权限为止。

记得删除那个用户,你就完成了。

票数 5
EN

Stack Overflow用户

发布于 2013-06-08 13:38:28

Introduction

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

phpMyAdmin on RDS

如果您通过phpMyAdmin创建了您的数据库,您确定它是否配置为连接到远程Amazon RDS instance,还是正在运行您的localhost?

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

代码语言:javascript
复制
$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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16874294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档