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

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

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

답변1

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에서는 쉘에서 -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-per-table을 사용합니다. 즉, 스크립트는 테이블이 존재하더라도 존재하지 않는다고 말할 수 있습니다.
  2. 파일 시스템을 사용하여 테이블을 복사하거나 MyISAM에서 InnoDB로 전환하는 등 다양한 이유로 해당 파일이 존재할 수 있습니다. 즉, 스크립트는 테이블이 존재하지 않더라도 존재한다고 말할 수 있습니다.

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

여기에 제시된 모든 방법은 사용자 자신의 권한(파일 시스템 또는 MySQL)이 올바른지 여부에 달려 있습니다. 잘못 입력하면 잘못된 음성 결과가 나올 가능성이 높습니다.

관련 정보