Dintr-un script shell, cum pot verifica dacă există o bază de date MySQL? (Administrarea sistemului, Mysql, Bază De Date, Bash, Shell)

ithinkihaveacat a intrebat.

mysqladmin -uroot create foo returnează o stare de ieșire de 1 dacă foo există și 0 în caz contrar, dar, bineînțeles, va crea și baza de date dacă nu există deja. Există o modalitate simplă de a verifica dacă o bază de date există?

6 răspunsuri
larsks

Îmi dau seama că acest răspuns a fost dat cu mult timp în urmă, dar mi se pare mult mai curat să fac acest lucru:

mysql -u root -e 'use mydbname'

Dacă baza de date există, acest lucru nu va produce niciun rezultat și va ieși cu returncode == 0.

Dacă baza de date nu există nu există, se va afișa un mesaj de eroare pe stderr și va ieși cu returncode == 1. Așadar, trebuie să faceți ceva de genul următor:

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

Acest lucru funcționează bine cu scripturile shell, nu necesită nicio procesare a ieșirii și nu se bazează pe accesul local la sistemul de fișiere.

Comentarii

  • Pentru oricine ar dori să suprime mesajul de eroare, încercați acest lucru (desigur, luați în considerare scoaterea parolei pentru securitate): if ! mysql -u <user> -p<pw> -e ‘use <db name>’ 2> /dev/null; then mysql -u <user> -p<pw> -e ‘CREATE DATABASE <db name>;’; fi –  > Por Peter Mark.
Dom

mysql -e "SHOW DATABASES LIKE 'foo'"ar trebui să vă ajute.

http://dev.mysql.com/doc/refman/5.1/en/show-databases.html

Comentarii

  • Mulțumesc. Cu câteva opțiuni de linie de comandă în plus, se integrează mai bine în scripturile shell: mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo. –  > Por ithinkihaveacat.
Lekensteyn

Bazele de date în MySQL sunt dosare în sistemul de fișiere. care fac să fie al naibii de ușor de găsit dacă există o bază de date:

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

În acest caz, /var/lib este datadirul de date al MySQL.Partea bună a acestui fragment este că nu va avea nevoie de un daemon MySQL care să ruleze și nici de acreditări. Bineînțeles că utilizatorului care execută comanda trebuie să i se permită să coboare în acel director.

Rob Barreca

De la http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ acest lucru este mai apropiat de ceea ce am vrut:

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

Comentarii

  • o modalitate perfectă de a verifica. –  > Por Mani.
Donald

Un pic cam complicat, dar acest lucru va afișa 1 dacă foo nu există, 0 în caz contrar:

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

Wile E.

Cred că puteți verifica dacă baza de date de care aveți nevoie funcționează într-un mod simplu în orice shell

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

și apoi verificați $? pentru codul de ieșire

Această comandă încearcă acreditările dvs. specifice (USERNAME și PASSWORD) pentru a se conecta la baza de date selectată și exit imediat. Astfel, dacă conexiunea este în regulă, codul de ieșire va fi 0, iar în caz contrar, non-zero.

Bineînțeles, puteți redirecționa orice ieșire către /dev/null dacă este necesar

PS. Această metodă este foarte utilă pentru a verifica starea de sănătate a sistemelor de stocare efemere, care sunt atât de rapide și populare în zilele noastre. Dacă baza de date nu poate fi conectată, ar trebui să începeți restaurarea cât mai repede.