2013-06-01 17 views
8

我已經建立了一個RDS數據庫實例和一個安全組,我使用EC2 Elastic IP作爲我的CIDR/IP。我還將安全組與我的EC2相關聯。在EC2實例無法使用Ec2和RDS選擇數據庫Foo

enter image description here

我的安全組看起來是這樣的。我將其中一個3306端口與我的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'。有任何想法嗎?

編輯1

我剛纔已經改變了所有的mysqli語句mysql。但是連接仍然不成功,即無法找到數據庫。

EDIT 2

這裏是我的MySQL權限的屏幕截圖。

enter image description here

回答

5

未知數據庫'XXXX'表示數據庫無法訪問。這可能是因爲:

  1. 服務器連接成功,但數據庫不存在。嘗試連接而不提供數據庫名稱作爲參數。然後運行查詢show databases;。它會顯示所有數據庫。

  2. 您正在連接到錯誤的服務器(您在其他服務器上存在其他數據庫存在的數據庫)。檢查存在的數據庫可以幫助您確定它是哪個服務器。

看來你能夠連接到Amazon RDS服務器。但數據庫不在那裏。如果我們嘗試連接到全新安裝的mysql,則會顯示類似的錯誤。它具有零數據庫(information_schemamysql除外)。

+0

好的,這真的是很好的反饋。我運行查詢'show databases',它列出了數據庫'information_schema','performance_schema','mysql'和'ckdb'。但在'phpMyAdmin'中,我只能看到上面的兩個模式,再加上'mysql'加我創建的例如'test'和'test1',而不是'ckdb'。我如何讀寫我在'phpMyAdmin'中創建的'test'和'test1'表? –

+0

啊,好像你是通過phpMyAdmin而不是Amazon RDS在本地機器上創建數據庫的。您必須配置phpMyAdmin才能將Amazon RDS用作外部數據庫。請參閱本教程以瞭解如何配置它:http:// blog.benkuhl.com/2010/12/how-to-remote-manage-an-amazon-rds-instance-with-phpmyadmin /。然後你必須提到你想在數據庫選擇框上運行查詢的數據庫。 – user568109

0

您需要使用mysqli_或mysql_,最好是第一。它將無法互換它們。

如果您遇到未知數據庫錯誤,您的連接成功,您嘗試選擇一個不存在的數據庫,或者用戶沒有權限訪問。

+0

嗨,感謝您的幫助。我已將所有內容切換到'mysql',但仍然無法正常工作。數據庫肯定會退出,我已經發布了我認爲沒關係的'mysql'特權。任何其他想法? –

+0

既然它還沒有工作,我可以建議切換回'mysqli_',因爲它會前進,'mysql_'是一個折舊功能。請檢查數據庫名稱和用戶是否正確 - 以防萬一MySQl區分大小寫。你可以連接到'INFORMATION_SCHEMA'數據庫嗎?或者連接沒有指定db,然後執行'USE'選擇一個數據庫? – Stoleg

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。但是連接仍然不成功,即無法找到數據庫。

有是沒有理由你應該改變mysqlimysql因爲它Officially Depreciated at 5.5.0

5

首先,你不應該永遠無法使用mysql_ *擴展和它的功能了。他們已經過時了,不贊成使用,並且會在近期版本中從php中刪除。使用mysqli_PDO。有關更多信息,請參見the huge red warning at the top of the mysql_connect page in the php docs

  • 您連接到正確的服務器

連接到SSH你的網絡服務器,並使用本地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看到的是不正確的一;檢查你的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的權限。

  • 檢查用戶是否可以看到有問題的數據庫。當您與特定用戶連接時,「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權限再次創建該用戶,然後重試,直到您複製所需的權限。

記得刪除那個用戶,你就完成了。

相關問題