Dari skrip shell, bagaimana saya bisa mengecek apakah ada database MySQL?


23

mysqladmin -uroot create foomengembalikan status keluar 1 jika fooada, dan 0 sebaliknya, tetapi tentu saja itu juga akan membuat database jika belum ada. Apakah ada cara mudah untuk mengecek apakah ada database?

Jawaban:


43

Saya menyadari ini telah dijawab sejak lama, tetapi tampaknya jauh lebih bersih bagi saya untuk melakukan ini:

mysql -u root -e 'use mydbname'

Jika database ada, ini tidak akan menghasilkan output dan keluar dengan returncode == 0.

Jika database tidak ada, ini akan menghasilkan pesan kesalahan pada stderr dan keluar dengan returncode == 1. Jadi Anda akan melakukan sesuatu seperti ini:

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

Ini beroperasi dengan baik dengan skrip shell, tidak memerlukan pemrosesan output, dan tidak bergantung pada memiliki akses sistem file lokal.


1
Bagi siapa pun yang mungkin ingin menekan pesan kesalahan, coba ini (tentu saja, pertimbangkan untuk mengeluarkan kata sandi Anda demi keamanan): if! mysql -u <user> -p <pw> -e 'gunakan <db name>' 2> / dev / null; lalu mysql -u <user> -p <pw> -e 'BUAT DATABASE <db name>;'; fi
Peter Mark


7

Database di MySQL adalah folder di sistem file. Itu membuatnya sangat mudah untuk menemukan apakah ada database:

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

Dalam hal ini, /var/libadalah datadir MySQL. Yang menyenangkan tentang cuplikan ini adalah tidak perlu menjalankan daemon MySQL, juga tidak memerlukan kredensial. Tentu saja pengguna yang menjalankan perintah harus diizinkan masuk ke direktori itu.



2

Agak macet, tetapi ini akan mencetak 1 jika foo tidak ada, 0 sebaliknya:

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

2

Saya pikir Anda dapat memeriksa apakah database yang dibutuhkan Anda bekerja secara sederhana di shell apa pun

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

dan kemudian periksa $?kode keluar

Perintah ini mencoba kredensial spesifik Anda (USERNAME dan PASSWORD) untuk terhubung ke DATABASE yang dipilih dan exitsegera. Jadi, jika koneksi ok exitcode akan menjadi 0, dan bukan nol sebaliknya.

Tentu saja, Anda dapat mengarahkan output apa pun ke /dev/nulljika diperlukan

PS. Metode ini sangat berguna untuk memeriksa kesehatan penyimpanan sementara yang begitu cepat dan populer di zaman kita. Jika basis data tidak dapat terhubung, Anda harus mulai memulihkan secepatnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.