2013-06-01 7 views
8

Ho impostato un'istanza del database RDS con un gruppo di sicurezza in cui utilizzo il mio IP Elastic EC2 come CIDR/IP. Ho anche associato il gruppo di sicurezza con il mio EC2.Impossibile selezionare Database Foo utilizzando Ec2 e RDS

enter image description here

Il mio gruppo di protezione sul EC2 grado assomiglia a questo. Ho associato una delle porte 3306 con il mio IP Elastic.

enter image description here

ho creato un database e una tabella in phpMyAdmin e sto cercando di verificare il lavoro svolto stampando tutti i valori utilizzando il codice qui sotto:

<?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); 

?> 

L'errore che io sono ottenere è Unknown database 'XXXX'. Qualche idea?

EDIT 1

ho appena cambiato tutti i mysqli istruzioni per mysql. Ma la connessione non ha ancora successo, il database non può essere trovato.

EDIT 2

Ecco uno screenshot dei miei privilegi di MySQL.

enter image description here

risposta

5

Il database sconosciuto "XXXX" indica che non è possibile accedere al database. Ciò potrebbe accadere perché:

  1. Il server si sta connettendo correttamente, ma il database non esiste. Prova a connetterti senza dare il nome del database come parametro. Quindi eseguire la query show databases;. Mostrerà tutti i database lì.

  2. Si sta effettuando la connessione al server errato (il database è stato aggiunto da qualche altra parte il database esiste su un altro server). Controllare i database presenti può aiutarti a identificare il server.

Sembra che sia possibile connettersi al server Amazon RDS. Ma il database non c'è. Un errore simile mostrerebbe se provassimo a connetterci alla nuova installazione di mysql. Ha zero database (diversi da information_schema e mysql).

+0

Ok, questo è davvero un buon feedback. Ho eseguito la query 'show databases' e ho elencato i database' information_schema', 'performance_schema',' mysql' e 'ckdb'. Ma in 'phpMyAdmin' vedo solo i due schemi sopra, oltre a' mysql' più quelli che ho creato come 'test' e' test1', ma non 'ckdb'. Come potrei leggere e scrivere sulle tabelle 'test' e' test1' che ho creato in 'phpMyAdmin'? –

+0

Ahh, sembra che tu abbia creato i database nel tuo computer locale tramite phpMyAdmin invece di Amazon RDS. Devi configurare phpMyAdmin per utilizzare Amazon RDS come database esterno. Vedi questo tutorial su come configurarlo: 'http: // blog.benkuhl.com/2010/12/how-to-remoty-manage-an-amazon-rds-instance-with-phpmyadmin /'. E poi devi menzionare il database su cui vuoi eseguire la query sul database selectbox. – user568109

0

è necessario utilizzare mysqli_ o mysql_, preferibilmente la prima. Non funzionerà per scambiarli.

Se si verifica un errore di database sconosciuto, la connessione ha esito positivo, si sta tentando di selezionare un db che non esiste o che l'utente non ha diritti di accesso.

+0

Ciao, grazie per l'aiuto. Ho cambiato tutto in 'mysql', ma non funziona ancora. Il database esce definitivamente e ho postato i miei privilegi 'mysql' che penso siano ok. Altre idee? –

+0

Dato che non funziona ancora, posso suggerire di tornare a 'mysqli_', in quanto sarà molto più avanti e' mysql_' è una funzionalità deprezzata. Si prega di verificare se il nome del database e l'utente sono nel caso corretto - nel caso in cui MySQl rilevi la distinzione tra maiuscole e minuscole. Puoi stabilire una connessione con il database 'INFORMATION_SCHEMA'?Oppure connettersi senza specificare db, quindi fare 'USE' per selezionare un db? – Stoleg

2

Introduzione

L'errore Unknown database 'XXXX' significa che la banca dati does not exist e non ha nulla a che fare con i privilegi di MySQL.

phpMyAdmin su RDS

Se è stato creato il database tramite phpMyAdmin Sei sicuro che è stato configurato per la connessione a distanza Amazon RDS instance o siete davanzale a lavorare sul tuo localhost

Abilita le config.inc.php per assicurarsi è configurato correttamente. È possibile aggiungere il server remoto chiamando

$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'; 

Meglio DB Gestione

È inoltre possibile utilizzare MySQL workbench che non solo permetterà di creare la e mange il database, ma è anche possibile monitorare in tempo reale. È possibile collegare direttamente o utilizzare SSH

Infine

ho appena cambiato tutte le dichiarazioni mysqli a mysql. Ma la connessione non ha ancora successo, il database non può essere trovato.

Non è essere alcun motivo si dovrebbe cambiare mysqli-mysql perché Officially Depreciated at 5.5.0

5

Prima di tutto, non si dovrebbe (mai) utilizzare il mysql_ * l'estensione e la sua funzione più. Sono obsoleti, deprecati e saranno rimossi da php in una versione vicina. Utilizzare mysqli_ o PDO. Vedi the huge red warning at the top of the mysql_connect page in the php docs per maggiori informazioni.

  • Verificare che ci si connette al server giusto

il collegamento ad un server web in SSH, e utilizza il client mysql locale per connettersi al server di database come root (vi verrà chiesto la password per il utente 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> 

Se questo lavoro, si dovrebbe finire su un prompt mysql. Se ciò non ha funzionato, il problema si trova nella configurazione di rete, il server web non può connettersi al server mysql (controllare le aperture delle porte).

  • Assicurarsi che il database in questione esiste sul server

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

Se non è possibile vedere il nome del database nella lista, questo significa che il server vostra sede in phpMyAdmin non sia corretta uno; controlla le tue impostazioni phpmyadmin.

  • Verificare se è possibile connettersi con questo utente utilizzando il client cli mysql. Si noti che non si specifica un database sulla linea di connessione.

    // 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> 
    

Se questo non funziona e non si arriva a una richiesta, questo può essere o perché il permesso non lo fa esiste, o perché l'utente non riesce a connettersi dall'host specificato. Guarda il messaggio di errore che mysql mostrerà; qualcosa di simile a!

ERROR 1045 (28000): Access denied for user 'USERNAME'@'HOST' (using password: NO) 

Qual è l'host è importante e bisogna assicurarsi che sia consentito nei vostri privilegi. Se tutto sembra ok e non funziona ancora, prova a modificare i privilegi per quell'utente e imposta l'HOST su '%' (significa che tutto è permesso). Se funziona, significa che l'HOST è configurato erroneamente nei privilegi di mysql.

  • Verificare se l'utente può visualizzare il database in questione. Quando ti connetti con un utente specifico, "mostra database" elenca solo i database che questo utente ha i privilegi da vedere.

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

Se non è possibile vedere il vostro database nell'elenco, significa che i privilegi per l'utente sono sbagliati/non impostato per questo database.

Se ogni passaggi qui funziona bene, probabilmente significa che hai un errore nel codice php, ricontrollare l'host, password, nome utente, ...

  • Se davvero non riesco a capire che cosa parti dei privilegi sono sbagliate, provare a creare un utente fittizio saranno tutte le autorizzazioni da qualsiasi host:

    $ 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 > 
    

una volta che hai fatto questo utente e può connettersi ad esso, cercare di connettersi ad esso utilizzando il php codice. Una volta eseguita questa operazione, elimina l'utente (utilizzando DROP USER 'testuser'), creandolo di nuovo con un privilegio HOST più limitato e riprova, finché non hai replicato le autorizzazioni desiderate.

Ricordarsi di eliminare quell'utente e il gioco è fatto.