mysqladmin -uroot create foo
ส่งคืนสถานะการออก 1 หากfoo
มีอยู่และ 0 เป็นอย่างอื่น แต่แน่นอนว่ามันจะสร้างฐานข้อมูลด้วยหากยังไม่มีอยู่ มีวิธีง่ายๆในการตรวจสอบว่ามีฐานข้อมูลอยู่หรือไม่?
mysqladmin -uroot create foo
ส่งคืนสถานะการออก 1 หากfoo
มีอยู่และ 0 เป็นอย่างอื่น แต่แน่นอนว่ามันจะสร้างฐานข้อมูลด้วยหากยังไม่มีอยู่ มีวิธีง่ายๆในการตรวจสอบว่ามีฐานข้อมูลอยู่หรือไม่?
คำตอบ:
ฉันรู้ว่าสิ่งนี้ได้รับคำตอบมานานแล้ว แต่ดูเหมือนว่าฉันจะทำสิ่งนี้ดีกว่า:
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
สิ่งนี้ทำงานได้ดีกับเชลล์สคริปต์ไม่ต้องการการประมวลผลเอาต์พุตใด ๆ และไม่ต้องพึ่งพาการเข้าถึงระบบไฟล์ในเครื่อง
mysql -e "SHOW DATABASES LIKE 'foo'"
ควรช่วยคุณ
mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo
มีไม่กี่ตัวเลือกมากขึ้นบรรทัดคำสั่งจะรวมที่ดีขึ้นในเชลล์สคริปต์:
ฐานข้อมูลใน MySQL เป็นโฟลเดอร์ในระบบไฟล์ ทำให้ง่ายต่อการค้นหาว่ามีฐานข้อมูลอยู่หรือไม่:
test -d "/var/lib/mysql/databasename"
ในกรณีนี้/var/lib
เป็นข้อมูลของ MySQL สิ่งที่ดีเกี่ยวกับตัวอย่างนี้คือมันไม่จำเป็นต้องมี daemon ของ MySQL ที่ทำงานอยู่และไม่จำเป็นต้องมีข้อมูลประจำตัว แน่นอนว่าผู้ใช้ที่รันคำสั่งนั้นจะต้องได้รับอนุญาตให้ลงไปในไดเรกทอรีนั้น
จาก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
บิตแฮ็ค แต่สิ่งนี้จะพิมพ์ 1 หากไม่มี foo อยู่ 0 เป็นอย่างอื่น:
mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'
ฉันคิดว่าคุณสามารถตรวจสอบว่าฐานข้อมูลที่คุณต้องการทำงานอย่างเรียบง่ายในทุกเชลล์หรือไม่
mysql -uUSERNAME -pPASSWORD DATABASE -e exit
จากนั้นตรวจสอบ$?
รหัสออก
คำสั่งนี้จะพยายามใช้ข้อมูลรับรองเฉพาะของคุณ (USERNAME และ PASSWORD) เพื่อเชื่อมต่อกับฐานข้อมูลที่เลือกและexit
ทันที ดังนั้นหากการเชื่อมต่อ ok exitcode จะเป็น 0 และไม่ใช่ศูนย์มิฉะนั้น
แน่นอนคุณสามารถเปลี่ยนเส้นทางผลลัพธ์ใด ๆ/dev/null
หากจำเป็น
PS วิธีนี้มีประโยชน์มากในการตรวจสอบสุขภาพของคลังเก็บชั่วคราวซึ่งรวดเร็วและเป็นที่นิยมในยุคสมัยของเรา หากไม่สามารถเชื่อมต่อฐานข้อมูลได้คุณควรเริ่มต้นการคืนค่าโดยเร็ว