쉘 스크립트에서 MySQL 데이터베이스가 있는지 어떻게 확인할 수 있습니까? 않으면 0을 리턴 하지만 데이터베이스가 존재하지

mysqladmin -uroot create foofoo존재하는 경우 종료 상태 1을 리턴하고 그렇지 않으면 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'"
당신을 도울 것입니다.

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


답변

MySQL의 데이터베이스는 파일 시스템의 폴더입니다. 따라서 데이터베이스가 있는지 쉽게 찾을 수 있습니다.

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

이 경우 /var/libMySQL의 datadir입니다. 이 스 니펫의 장점은 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

답변

약간 해키이지만 foo가 존재하지 않으면 1을, 그렇지 않으면 0을 출력합니다.

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

답변

필요한 데이터베이스가 모든 쉘에서 간단한 방식으로 작동하는지 확인할 수 있다고 생각합니다.

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

그런 다음 $?종료 코드 를 확인하십시오.

이 명령은 특정 자격 증명 (USERNAME 및 PASSWORD)을 시도하여 선택한 DATABASE에 exit즉시 연결 합니다. 따라서 연결이 정상이면 종료 코드는 0이고 그렇지 않으면 0이 아닙니다.

물론 /dev/null필요한 경우 모든 출력을 리디렉션 할 수 있습니다

추신. 이 방법은 오늘날 매우 빠르고 인기있는 임시 스토리지의 상태를 확인하는 데 매우 유용합니다. 데이터베이스를 연결할 수 없으면 최대한 빨리 복원을 시작해야합니다.