2013-06-01 10 views
8

का उपयोग कर डेटाबेस फू का चयन करने में असमर्थ मैंने सुरक्षा समूह के साथ एक आरडीएस डाटाबेस इंस्टेंस स्थापित किया है जहां मैं अपने सीआईडीआर/आईपी के रूप में अपने ईसी 2 लोचदार आईपी का उपयोग करता हूं। मैंने अपने ईसी 2 के साथ सुरक्षा समूह को भी जोड़ा है। EC2 उदाहरण परEc2 और RDS

enter image description here

मेरे सुरक्षा समूह इस तरह दिखता है। मैंने अपने लोचदार आईपी के साथ 3306 बंदरगाहों में से एक को जोड़ा।

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

मैं सिर्फ mysql करने के लिए सभी mysqli बयान बदल दिया है। लेकिन कनेक्शन अभी भी सफल नहीं है यानी डेटाबेस नहीं मिला।

संपादित 2

यहाँ मेरी mysql विशेषाधिकार का एक स्क्रीनशॉट है।

enter image description here

उत्तर

5

अज्ञात डेटाबेस 'XXXX' का अर्थ है डेटाबेस को एक्सेस नहीं किया जा सका। ऐसा इसलिए हो सकता है क्योंकि:

  1. सर्वर सफलतापूर्वक कनेक्ट हो रहा है, लेकिन डेटाबेस मौजूद नहीं है। पैरामीटर के रूप में डेटाबेस नाम दिए बिना कनेक्ट करने का प्रयास करें। फिर क्वेरी show databases; चलाएं। यह वहां सभी डेटाबेस दिखाएगा।

  2. आप गलत सर्वर से कनेक्ट कर रहे हैं (आपने डेटाबेस को कहीं और डेटाबेस अन्य सर्वर पर मौजूद किया है)। उपस्थित डेटाबेस को जांचने से आप यह पहचानने में सहायता कर सकते हैं कि यह कौन सा सर्वर है।

ऐसा लगता है कि आप अमेज़ॅन आरडीएस सर्वर से कनेक्ट करने में सक्षम हैं। लेकिन डेटाबेस नहीं है। इसी तरह की त्रुटि दिखाएगी कि क्या हम mysql की ताजा स्थापना से कनेक्ट करने का प्रयास करते हैं। इसमें शून्य डेटाबेस हैं (information_schema और mysql के अलावा)।

+0

ठीक है, यह वास्तव में अच्छी प्रतिक्रिया है। मैंने क्वेरी 'शो डेटाबेस' चलाया और यह डेटाबेस 'info_schema', 'performance_schema',' mysql' और 'ckdb' सूचीबद्ध किया। लेकिन 'phpMyAdmin' में मैं केवल उपरोक्त दो स्कीमा देखता हूं, साथ ही 'mysql' प्लस जिन्हें मैंने' test' और 'test1'' बनाया है, लेकिन' ckdb' नहीं। मैं 'phpMyAdmin' में बनाए गए टेबल 'test' और' test1' को कैसे पढ़ूं और लिखूं? –

+0

आह, ऐसा लगता है जैसे आपने अमेज़ॅन आरडीएस की बजाय phpMyAdmin के माध्यम से अपनी स्थानीय मशीन में डेटाबेस बनाए हैं। अमेज़ॅन आरडीएस को बाहरी डेटाबेस के रूप में उपयोग करने के लिए आपको phpMyAdmin को कॉन्फ़िगर करना होगा। इसे कॉन्फ़िगर करने के तरीके पर इस ट्यूटोरियल को देखें: 'http: // blog.benkuhl.com/2010/12/how-to-remotely-manage-an-amazon-rds-instance-with-phpmyadmin/'। और फिर आपको उस डेटाबेस का उल्लेख करना होगा जिसे आप डेटाबेस चयन बॉक्स पर क्वेरी चलाने के लिए चाहते हैं। – user568109

0

आप mysqli_ या mysql_, अधिमानतः पहले प्रयोग करना होगा। यह उन्हें बदलने के लिए काम नहीं करेगा।

यदि आपको अज्ञात डेटाबेस त्रुटि मिल रही है, तो आपका कनेक्शन सफल है, आप एक डीबी चुनने की कोशिश कर रहे हैं जो या तो मौजूद नहीं है, या उपयोगकर्ता को पहुंचने के लिए अनुदान नहीं है।

+0

हाय, सहायता के लिए धन्यवाद। मैंने सबकुछ 'mysql' पर बदल दिया है, लेकिन यह अभी भी काम नहीं कर रहा है। डेटाबेस निश्चित रूप से बाहर निकलता है और मैंने अपना 'mysql' विशेषाधिकार पोस्ट किया है जो मुझे लगता है ठीक है। कोई अन्य विचार? –

+0

चूंकि यह अभी भी काम नहीं कर रहा है, क्या मैं सुझाव दे सकता हूं कि 'mysqli_' पर वापस स्विच करें, क्योंकि यह आगे बढ़ेगा और' mysql_' एक अवमूल्यन सुविधा है। कृपया जांचें कि क्या डेटाबेस नाम और उपयोगकर्ता सही मामले में हैं - यदि MySQL केस संवेदनशील है। क्या आप 'INFORMATION_SCHEMA' डेटाबेस से कनेक्शन बना सकते हैं?या डीबी निर्दिष्ट किए बिना कनेक्ट करें, और फिर डीबी का चयन करने के लिए 'उपयोग करें' करें? – Stoleg

2

परिचय

त्रुटि Unknown database 'XXXX' डेटा बेस does not exist का मतलब है और अपने mysql विशेषाधिकारों के साथ कोई संबंध नहीं है।आरडीएस पर

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

अंत में

मैं सिर्फ mysql के लिए सभी mysqli बयान बदल दिया है सकते हैं। लेकिन कनेक्शन अभी भी सफल नहीं है यानी डेटाबेस नहीं मिला।

कोई कारण जो भी आप mysql करने के लिए mysqli बदलना चाहिए क्योंकि यह 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 ग्राहक का उपयोग (आप के लिए पासवर्ड के लिए कहा जाएगा रूट उपयोगकर्ता):

$ 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 विशेषाधिकार के साथ फिर से बनाएं और फिर से प्रयास करें, जब तक आप अपनी इच्छित अनुमतियों को दोहराना नहीं चाहते।

उस उपयोगकर्ता को हटाने के लिए याद रखें और आप कर चुके हैं।