다른 oneliner로 테이블 이름 목록을 추출한 mysql -sN …
다음 "for… in…"쉘 루프에서 각 항목을 사용하여 삭제합니다.
for f in `mysql dbname -sN -e "SHOW TABLES LIKE 'bak\_%' "` ; do mysql dbname -rsN -e "DROP TABLE $f"; done
또는 (확장 버전)
for f in `mysql dbname -sN -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME LIKE 'bak\_%' "` ; do mysql dbname -rsN -e "DROP TABLE $f"; done
또는 테이블 이름이 충분히 짧은 경우 "group_concat"을 사용하여 * 테이블 이름을 연결합니다.
tables=`mysql dbname -srN -e "SELECT GROUP_CONCAT(TABLE_NAME SEPARATOR ',') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME LIKE 'bak\_%' "`; mysql dbname -rsN -e "DROP TABLE $tables"
* "group_concat_max_len"값과 같은 일부 제한 (일반적으로 1024와 같음, 70 개의 테이블 참조)이 방해를받을 수 있습니다.
동일한 원칙이지만 "bak_"로 시작하는 테이블을 제외한 모든 테이블을 덤프합니다.
for f in `mysql dbname -sN -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname' AND NOT(TABLE_NAME LIKE 'bak\_%') "` ; do mysqldump -u [u] -p dbname "$f" >> dump_dbname.sql; done