শেল স্ক্রিপ্ট থেকে, আমি কীভাবে মাইএসকিউএল ডাটাবেস বিদ্যমান কিনা তা পরীক্ষা করে দেখতে পারি?


23

mysqladmin -uroot create foofooউপস্থিত থাকলে 1 এর প্রস্থান স্থিতি এবং অন্যথায় 0 প্রদান করে তবে অবশ্যই এটি ইতিমধ্যে বিদ্যমান না থাকলে এটি ডাটাবেস তৈরি করবে। কোনও ডাটাবেস আছে কি না তা খতিয়ে দেখার কোনও সহজ উপায় আছে?

উত্তর:


43

আমি বুঝতে পারি যে এর উত্তর অনেক আগেই দেওয়া হয়েছিল, তবে এটি করা আমার পক্ষে আরও পরিষ্কার clean

mysql -u root -e 'use mydbname'

যদি ডাটাবেসটি বিদ্যমান থাকে তবে এটি কোনও আউটপুট তৈরি করবে না এবং রিটার্নকোড == 0 দিয়ে প্রস্থান করবে।

তাহলে ডাটাবেসের নেই অস্তিত্ব, এই একটি ত্রুটির বার্তা উত্পাদন করা হবে দ্বারা stderr এবং == returncode সঙ্গে 1. প্রস্থান আপনি ভালো কিছু করতে চাই তাই:

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

এটি শেল স্ক্রিপ্টগুলির সাথে দুর্দান্তভাবে পরিচালনা করে, আউটপুট কোনও প্রসেসিং প্রয়োজন হয় না এবং স্থানীয় ফাইল সিস্টেম অ্যাক্সেস থাকার উপর নির্ভর করে না।


1
যে কেউ ত্রুটি বার্তাটি দমন করতে চাইতে পারে তার জন্য এটি ব্যবহার করে দেখুন (অবশ্যই সুরক্ষার জন্য আপনার পাসওয়ার্ড নেওয়ার বিষয়টি বিবেচনা করুন): যদি! mysql -u <ব্যবহারকারীর -p <pw> -e 'ব্যবহার <ডিবি নাম>' 2> / দেব / নাল; তারপরে mysql -u <user> -p <pw> -e 'ডেটাবেস তৈরি করুন <ডিবি নাম>;'; ফাই
পিটার মার্ক

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

মাইএসকিউএল-এ ডাটাবেসগুলি ফাইল সিস্টেমে ফোল্ডার are এটি কোনও ডাটাবেস বিদ্যমান কিনা তা খুঁজে পাওয়া সহজ করে তোলে:

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

এই ক্ষেত্রে, /var/libমাইএসকিউএল এর ডেটাডির হয়। এই স্নিপেটটি সম্পর্কে দুর্দান্ত বিষয়টি হল এটির জন্য কোনও মাইএসকিউএল ডেমন চলবে না, এর জন্য শংসাপত্রেরও প্রয়োজন নেই। অবশ্যই কমান্ডটি ব্যবহারকারী ব্যবহারকারীকে সেই ডিরেক্টরিতে নামতে হবে।


6

Http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql- ডেটাবেস- এক্সিস্টগুলি থেকে / আমি যা চেয়েছিলাম তার তুলনায় এটি আরও অনুরূপ:

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

এটি যাচাই করার সঠিক উপায় way
মণি

2

কিছুটা হ্যাকি, তবে foo উপস্থিত না থাকলে এটি 1 টি মুদ্রণ করবে, অন্যথায় 0:

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

2

আমি মনে করি আপনার প্রয়োজনীয় ডাটাবেসগুলি কোনও শেলের সাধারণ উপায়ে কাজ করছে কিনা তা আপনি পরীক্ষা করতে পারেন

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

এবং তারপরে $?প্রস্থান কোডের জন্য চেক করুন

এই কমান্ডটি নির্বাচিত DATABASE এবং exitতাত্ক্ষণিকভাবে সংযোগ করতে আপনার নির্দিষ্ট শংসাপত্রগুলি (USERNAME এবং পাসওয়ার্ড) চেষ্টা করে। সুতরাং, সংযোগ যদি ঠিক থাকে তবে এক্সটোকড 0 হবে এবং অন্যথায় শূন্য নয়।

অবশ্যই, আপনি /dev/nullপ্রয়োজন হলে যে কোনও আউটপুট পুনর্নির্দেশ করতে পারেন

গীত। এই পদ্ধতিটি অতি সাময়িক স্টোরেজের স্বাস্থ্য পরীক্ষা করতে খুব দরকারী যা আমাদের দিনগুলিতে এত দ্রুত এবং জনপ্রিয়। যদি ডাটাবেস সংযুক্ত না করা যায় তবে আপনার তাত্পর্যপূর্ণ পুনরুদ্ধার শুরু করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.