쉘 스크립트에서 MySQL 데이터베이스의 테이블이 존재하는지 여부를 어떻게 확인할 수 있습니까?


8

사용자가 테이블에서 수행해야 할 작업을 선택할 수있는 스크립트를 작성하려고합니다. 테이블이 있는지 확인하고 싶습니다. 그것이 존재하면 나는 다른 것을 계속하거나 그렇지 않으면 테이블이 존재하지 않는다고 말합니다. 어떻게하면 될까요?

답변:


12
if [ $(mysql -N -s -u root -p -e \
    "select count(*) from information_schema.tables where \
        table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
    do something
else
    echo "table <table_name> does not exist"
    exit 1
fi
  • -N 열 이름을 건너 뛰려면
  • -s 비표 형 출력용

2
비밀번호를 중지하고 프롬프트하지 않고 스크립트를 MySQL에 로그인하려면 .my.cnf홈 디렉토리에 파일을 작성 [client]하고을 포함 하는 블록을 추가 할 수 있습니다 password="my_password". 매뉴얼에서 사용자 옵션 파일 섹션을 찾아보십시오 .
Ladadadada

4

MySQL에서는 쉘에서 -e를 사용할 수 있습니다

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?

3

mysql 클라이언트를 실행하고 mysql 서버에 로그인하지 않는 방법을 원한다면 다음과 같이하십시오.

if ls -l /var/lib/mysql/database/table.frm 2> /dev/null > /dev/null
then
  echo Table exists
else
  echo Table does not exist
fi

첫 번째 행에서 데이터 디렉토리의 경로, 데이터베이스 이름 및 테이블 이름을 바꿔야합니다.

주의 사항 :

  1. InnoDB를 사용 중이고 테이블 당 innodb-file-file을 사용 하지 않는 경우에는 작동 하지 않습니다 . 즉, 스크립트는 테이블이 존재하더라도 테이블이 존재하지 않는다고 말할 수 있습니다.
  2. 파일 시스템을 사용하여 테이블을 복사하거나 MyISAM에서 InnoDB로 전환하는 등 여러 가지 이유로 해당 파일이 존재할 수 있습니다. 즉, 스크립트는 테이블이 존재하지 않더라도 존재한다고 말할 수 있습니다.

위의 이유로 이미 제시 된 다른 방법만큼 신뢰할 수는 없지만 mysql 클라이언트를 피하므로 여전히 가치가 있습니다.

여기에 제시된 모든 방법은 자신의 권한 (파일 시스템 또는 MySQL)이 올바른지 확인하는 것입니다. 당신이 그들을 잘못하면 당신은 대부분 거짓 부정을 얻을 것입니다.

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