Bir kabuk betiğinden, bir MySQL veritabanının var olup olmadığını nasıl kontrol edebilirim?


23

mysqladmin -uroot create foovarsa 1 foo, ve 0 ise bir çıkış durumu döndürür , ancak elbette yoksa veritabanını da oluşturur. Bir veritabanının var olup olmadığını kontrol etmenin kolay bir yolu var mı?

Yanıtlar:


43

Bunun çok uzun zaman önce cevaplandığını fark ettim, ancak bunu yapmam çok daha temiz görünüyor:

mysql -u root -e 'use mydbname'

Eğer veritabanı mevcutsa, bu hiçbir çıktı üretmeyecek ve returncode == 0 ile çıkacaktır.

Veritabanı ise vermez var, bu bir hata iletisi üretecektir stderr'e Böyle bir şey yapacağını Yani 1. == dönüş kodu ile ve çıkış:

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

Bu, kabuk komut dosyalarıyla iyi çalışır, çıktının herhangi bir şekilde işlenmesini gerektirmez ve yerel dosya sistemine erişime dayanmaz.


1
Hata mesajını bastırmak isteyebilecek herkes için şunu deneyin (elbette, güvenlik için şifrenizi çıkarmayı düşünün): if! mysql -u <kullanıcı> -p <pw> -e '<db name>' 2> / dev / null kullanın; sonra mysql -u <kullanıcı> -p <pw> -e 'CREATE DATABASE <db name>;'; fi
Peter Mark


7

MySQL'deki veritabanları dosya sistemindeki klasörlerdir. Bu, bir veritabanının var olup olmadığını kolayca bulmanızı sağlar:

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

Bu durumda, /var/libMySQL'in datadir. Bu kod parçasının güzel tarafı, çalışan bir MySQL arka plan programına ihtiyaç duymayacak olması, aynı zamanda kimlik bilgilerine de ihtiyacı olmaması. Elbette komutu çalıştıran kullanıcının bu dizine inmesine izin verilmelidir.



2

Biraz hacky, ancak bu yoksa foo yoksa 1 yazacak, aksi takdirde 0:

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

2

İhtiyaç duyduğunuz veritabanının basit bir şekilde çalışıp çalışmadığını kontrol edebileceğinizi düşünüyorum.

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

ve sonra $?çıkış kodunu kontrol edin

Bu komut, seçili DATABASE'e ve exithemen bağlanmak için belirli bilgilerinizi (USERNAME ve PASSWORD) dener . Bu yüzden, eğer bağlantı uygunsa çıkış kodu 0, aksi halde sıfır olmaz.

Of, Tabii ki, herhangi bir çıkış yönlendirebilirsiniz /dev/nullgerekirse

PS. Bu yöntem günümüzde çok hızlı ve popüler olan geçici depoların sağlığını kontrol etmek için çok kullanışlıdır. Veritabanı bağlanamıyorsa, en kısa sürede geri yüklemeye başlamalısınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.