데이터베이스를 삭제하지 않고 MySQL 데이터베이스에서 모든 테이블을 삭제하는 방법은 무엇입니까?


12

이름을 미리 몰라도 데이터베이스의 모든 테이블을 삭제해야합니다. 일반적인 절차는 데이터베이스를 삭제했다가 다시 만드는 것이지만 옵션은 아닙니다. 가장 좋은 방법은 무엇입니까?


1
아마도 이것을 미리 물어봤을 것입니다. 그러나 내가 생각했던 것보다 늦었습니다. What OS?
Jeff Snider

OS와 같은 유닉스 / 리눅스
Angel Chiang

답변:


18

mysqldump를 사용하는 더 간단한 bash one-liner가 있습니다 ( Thingy Ma Jig Blog ).

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

이 오류가 발생하는 경우 :

ERROR 1217 (23000) at line 1: Cannot delete or update a parent row: 
    a foreign key constraint fails

다음을 시도하십시오 :

(echo 'SET foreign_key_checks = 0;'; 
 (mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | 
     grep ^DROP); 
 echo 'SET foreign_key_checks = 1;') | \
    mysql -u[USERNAME] -p[PASSWORD] -b [DATABASE]

이제 제약 조건을 무시합니다.


5

information_schema 테이블을 사용하여 데이터베이스에 대한 메타 데이터를 가져온 다음 여기에 나열된 테이블을 삭제해야합니다.


3

빠른 쉘 스크립트로 시도해 볼 수도 있습니다.

#!/bin/bash

IFS=$'\n'
for table in `mysql <databaseName> -N -e 'show tables'`; do
    echo mysql <databaseName> -e "drop table $table"
done

echo예상대로 작동하는지 확인한 후 제거하십시오 .


그런데 왜 IFS 값보다 '$'를 쓰나요? 왜 "IFS = '\ n'"처럼 보이지 않습니까?
kolypto

@o_OTync를 사용 $''하면 bash는 백 슬래시 된 시퀀스를 문자 그대로 사용하지 않고 해석합니다. '\n'정확히 \ n을 포함 할 $IFS것입니다. \와 n 문자로 분리 되는 것을 이해합니다. $'\n'개행 문자 0x0D를 포함합니다. 자세한 내용은 여기 ( gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting) 를 참조하십시오 .
Jeff Snider

INFORMATION_SCHEMA를 사용하는 것보다 이것이 더 간단하다고 생각합니다.
Angel Chiang

0

있었다 Xaprb 블로그 항목은 친절이 다루고있는 최근.

사용 INFORMATION_SCHEMA이 항상 좋은 것은 아니며 Maatkit의 사랑스러운 사람들의 도구를 참조하는 이유 가 포함되어 있습니다 .

로 다음을 시도하십시오 mk-find.

mk-find '<database>' --printf 'DROP TABLE %D.%N'

결과에 만족하면 다음을 수행하십시오.

mk-find '<database>' --exec 'DROP TABLE %D.%N'

-2

파일 시스템 액세스 권한이 있으면 rm -rf databasename/*:).

Drop 데이터베이스 문은 동일한 기능을 수행합니다 ... MySQL 매뉴얼에서 발췌 :

DROP DATABASE 문은 주어진 데이터베이스 디렉토리에서 MySQL이 정상적으로 작동하는 동안 생성 할 수있는 파일과 디렉토리를 제거합니다.


2
MySQL이 이러한 파일이 갑자기 사라질 것으로 예상하지 않고 여러 작업, 트랜잭션, 복제, 잠금 중 중간에있을 수 있기 때문에 사소한 설정이 아닌 경우 매우 나쁜 생각입니다.
bot403

적절한 명령과 절차를 포함하도록 답변을 수정 하시겠습니까?
bot403
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.