จากเชลล์สคริปต์ฉันจะตรวจสอบว่ามีฐานข้อมูล MySQL อยู่ได้อย่างไร


22

mysqladmin -uroot create fooส่งคืนสถานะการออก 1 หากfooมีอยู่และ 0 เป็นอย่างอื่น แต่แน่นอนว่ามันจะสร้างฐานข้อมูลด้วยหากยังไม่มีอยู่ มีวิธีง่ายๆในการตรวจสอบว่ามีฐานข้อมูลอยู่หรือไม่?

คำตอบ:


42

ฉันรู้ว่าสิ่งนี้ได้รับคำตอบมานานแล้ว แต่ดูเหมือนว่าฉันจะทำสิ่งนี้ดีกว่า:

mysql -u root -e 'use mydbname'

หากฐานข้อมูลมีอยู่สิ่งนี้จะไม่สร้างเอาต์พุตและออกด้วย returncode == 0

หากฐานข้อมูลไม่มีอยู่สิ่งนี้จะสร้างข้อความแสดงข้อผิดพลาดบนstderrและออกด้วย returncode == 1 ดังนั้นคุณจะทำสิ่งนี้:

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

สิ่งนี้ทำงานได้ดีกับเชลล์สคริปต์ไม่ต้องการการประมวลผลเอาต์พุตใด ๆ และไม่ต้องพึ่งพาการเข้าถึงระบบไฟล์ในเครื่อง


1
สำหรับใครก็ตามที่อาจต้องการระงับข้อความแสดงข้อผิดพลาดลองใช้วิธีนี้ (แน่นอนให้ลองใช้รหัสผ่านของคุณเพื่อความปลอดภัย): ถ้า! mysql -u <user> -p <pw> -e 'ใช้ <db name>' 2> / dev / null; จากนั้น mysql -u <user> -p <pw> -e 'สร้างฐานข้อมูล <db name>;'; fi
Peter Mark


7

ฐานข้อมูลใน MySQL เป็นโฟลเดอร์ในระบบไฟล์ ทำให้ง่ายต่อการค้นหาว่ามีฐานข้อมูลอยู่หรือไม่:

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

ในกรณีนี้/var/libเป็นข้อมูลของ MySQL สิ่งที่ดีเกี่ยวกับตัวอย่างนี้คือมันไม่จำเป็นต้องมี daemon ของ 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 หากไม่มี foo อยู่ 0 เป็นอย่างอื่น:

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

2

ฉันคิดว่าคุณสามารถตรวจสอบว่าฐานข้อมูลที่คุณต้องการทำงานอย่างเรียบง่ายในทุกเชลล์หรือไม่

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

จากนั้นตรวจสอบ$?รหัสออก

คำสั่งนี้จะพยายามใช้ข้อมูลรับรองเฉพาะของคุณ (USERNAME และ PASSWORD) เพื่อเชื่อมต่อกับฐานข้อมูลที่เลือกและexitทันที ดังนั้นหากการเชื่อมต่อ ok exitcode จะเป็น 0 และไม่ใช่ศูนย์มิฉะนั้น

แน่นอนคุณสามารถเปลี่ยนเส้นทางผลลัพธ์ใด ๆ/dev/nullหากจำเป็น

PS วิธีนี้มีประโยชน์มากในการตรวจสอบสุขภาพของคลังเก็บชั่วคราวซึ่งรวดเร็วและเป็นที่นิยมในยุคสมัยของเรา หากไม่สามารถเชื่อมต่อฐานข้อมูลได้คุณควรเริ่มต้นการคืนค่าโดยเร็ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.