テーブルの名前のリストを抽出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