शेल स्क्रिप्ट से, मैं कैसे जांच सकता हूं कि क्या MySQL डेटाबेस मौजूद है?


23

mysqladmin -uroot create fooयदि fooमौजूद है, तो 1 का निकास स्थिति देता है, और अन्यथा, लेकिन निश्चित रूप से यह डेटाबेस भी बनाएगा यदि यह पहले से मौजूद नहीं है। क्या किसी डेटाबेस में मौजूद है या नहीं, इसकी जांच करने का कोई आसान तरीका है?

जवाबों:


43

मुझे लगता है कि यह एक लंबे समय से पहले उत्तर दिया गया था, लेकिन ऐसा करने के लिए यह मुझे बहुत साफ लगता है:

mysql -u root -e 'use mydbname'

यदि डेटाबेस मौजूद है, तो यह कोई आउटपुट नहीं देगा और रिटर्नकोड == 0 के साथ बाहर निकल जाएगा।

यदि डेटाबेस मौजूद नहीं है, तो यह stderr पर एक त्रुटि संदेश देगा और रिटर्नकोड के साथ बाहर निकल जाएगा == 1. तो आप कुछ इस तरह से करेंगे:

if ! mysql -u root -e 'use mydbname'; then
  ...do stuff to create database...
fi

यह शेल स्क्रिप्ट के साथ अच्छी तरह से काम करता है, आउटपुट के किसी भी प्रसंस्करण की आवश्यकता नहीं होती है, और स्थानीय फाइल सिस्टम एक्सेस पर निर्भर नहीं करता है।


1
जो कोई भी त्रुटि संदेश को दबा सकता है, उसके लिए यह प्रयास करें (बेशक, सुरक्षा के लिए अपना पासवर्ड लेने पर विचार करें): अगर! mysql -u <user> -p <pw> -e 'उपयोग <db नाम>' 2> / dev / null; उसके बाद mysql -u <user> -p <pw> -e 'CREAT DATABASE <db name>;'; फाई
पीटर मार्क

10

mysql -e "SHOW DATABASES LIKE 'foo'" आपकी मदद करनी चाहिए।

http://dev.mysql.com/doc/refman/5.1/en/show-databases.html


5
धन्यवाद। कुछ और कमांड-लाइन विकल्पों के साथ यह शेल स्क्रिप्ट में बेहतर एकीकृत करता है mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo:।
ithinkihaveacat

7

MySQL में डेटाबेस फाइलसिस्टम में फोल्डर हैं। इससे यह पता लगाना आसान है कि क्या डेटाबेस मौजूद है:

test -d "/var/lib/mysql/databasename"

इस मामले में, /var/libMySQL का डेटाडेट है। इस स्निपेट के बारे में अच्छी बात यह है कि इसे चलने के लिए MySQL डेमॉन की आवश्यकता नहीं होगी, न ही इसे क्रेडेंशियल की आवश्यकता है। बेशक कमांड चलाने वाले उपयोगकर्ता को उस निर्देशिका में नीचे उतरने की अनुमति दी जानी चाहिए।


6

से http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ इस मैं चाहता था के अधिक समान है:

DBNAME="dblookingfor"
DBEXISTS=$(mysql --batch --skip-column-names -e "SHOW DATABASES LIKE '"$DBNAME"';" | grep "$DBNAME" > /dev/null; echo "$?")
if [ $DBEXISTS -eq 0 ];then
    echo "A database with the name $DBNAME already exists."
else
    echo " database $DBNAME does not exist."
fi

इसे जांचने का सही तरीका।
मणि

2

थोड़ा हैकी, लेकिन यह 1 प्रिंट होगा अगर फू मौजूद नहीं है, तो 0:

mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'

2

मुझे लगता है कि आप जांच कर सकते हैं कि आपका आवश्यक डेटाबेस किसी भी शेल में सरल तरीके से काम कर रहा है या नहीं

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

और फिर $?बाहर निकलने के कोड के लिए जाँच करें

यह आदेश आपके विशिष्ट क्रेडेंशियल्स (USERNAME और PASSWORD) को चयनित DATABASE और exitतुरंत कनेक्ट करने का प्रयास करता है । इसलिए, यदि कनेक्शन ठीक है तो एग्जिटकोड 0 होगा, और गैर-शून्य अन्यथा।

बेशक, /dev/nullअगर जरूरत हो तो आप किसी भी आउटपुट को रीडायरेक्ट कर सकते हैं

पुनश्च। यह विधि अल्पकालिक भंडारण के स्वास्थ्य की जांच करने के लिए बहुत उपयोगी है जो हमारे दिनों में बहुत तेज़ और लोकप्रिय हैं। यदि डेटाबेस कनेक्ट नहीं किया जा सकता है, तो आपको asap को पुनर्स्थापित करना शुरू करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.