쉘 스크립트에서 MySQL 데이터베이스가 있는지 어떻게 확인할 수 있습니까?


22

mysqladmin -uroot create foofoo존재하는 경우 종료 상태 1을 리턴하고 그렇지 않으면 0을 리턴 하지만 데이터베이스가 존재하지 않는 경우 데이터베이스도 작성합니다. 데이터베이스가 있는지 간단히 확인할 수있는 쉬운 방법이 있습니까?

답변:


42

나는 이것이 오래 전에 답변되었다는 것을 알고 있지만, 이것을하는 것이 훨씬 더 깨끗해 보입니다.

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

이것은 셸 스크립트와 잘 작동하며 출력 처리가 필요하지 않으며 로컬 파일 시스템 액세스에 의존하지 않습니다.


1
오류 메시지를 표시하지 않으려는 사람은 이것을 시도하십시오 (물론 보안을 위해 비밀번호를 제거하는 것을 고려하십시오). if! mysql -u <user> -p <pw> -e 'use <db name>'2> / dev / null; 그런 다음 mysql -u <user> -p <pw> -e 'CREATE DATABASE <db name>;'; fi
Peter Mark


7

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

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

이 경우 /var/libMySQL의 datadir입니다. 이 스 니펫의 장점은 MySQL 데몬이 필요하지 않으며 자격 증명도 필요 없다는 것입니다. 물론 명령을 실행하는 사용자는 해당 디렉토리로 내려갈 수 있어야합니다.



2

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

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

2

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

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.