删除名称与模式匹配的多个数据库

sha*_*nuo 22 mysql

我想删除所有以单词开头的数据库.

abc
xyz
cms_db1
cms_db2
cms_xyz
pqr
Run Code Online (Sandbox Code Playgroud)

在上面给出的示例中,我想删除所有以"cms"开头的数据库.我想maatkit或shell脚本可以做到这一点.什么是最好的方法?

clo*_*jas 67

这是两个查询中的纯mySQL解决方案:

SELECT CONCAT('DROP DATABASE `', SCHEMA_NAME, '`;')
FROM `information_schema`.`SCHEMATA`
WHERE SCHEMA_NAME LIKE 'cms_%';
Run Code Online (Sandbox Code Playgroud)

然后复制并粘贴生成的记录集并运行

  • 您可以使用`-s`(`--silent`)标志来删除结果周围的网格,从而使复制和粘贴更容易. (6认同)
  • 比接受的答案要好得多. (3认同)
  • 很不错。我喜欢这个解决方案不是“触发这个动态删除查询”,而是“动态生成静态删除查询,然后自己运行它们”。它让您有机会在扣动扳机之前仔细检查一切。 (2认同)

小智 17

我不得不改进neurinos脚本,因为我的密码中有特殊的字符,缺少'drop DATABASE ...'而没有对DB_STARTS_WITH表达式进行比较.以下脚本适用于Ubuntu Server:

#!/bin/bash

DB_STARTS_WITH="grp"
MUSER="root"
MPWD="YOUR_PASSWORD"
MYSQL="mysql"

DBS="$($MYSQL -u $MUSER -p"$MPWD" -Bse 'show databases')"
for db in $DBS; do

if [[ "$db" == $DB_STARTS_WITH* ]]; then
    echo "Deleting $db"
    $MYSQL -u $MUSER -p"$MPWD" -Bse "drop database $db"
fi

done
Run Code Online (Sandbox Code Playgroud)


dku*_*ubb 10

我会使用类似的东西:

echo "SHOW DATABASES LIKE 'cms_%'" \
  | mysql \
  | tail -n +2 \
  | xargs -n1 mysqladmin -f drop
Run Code Online (Sandbox Code Playgroud)

如果你没有配置你的默认用户名和密码~/my.cnf,你可能需要通过-u和提供用户名和密码-p切换到上面的mysql/mysqladmin命令.

(编辑 - 将-n arg添加到尾部.)


neu*_*ino 9

Linux方式:

#!/bin/bash

DB_STARTS_WITH="cms"
MUSER="root"
MPWD="yourpass"
MYSQL="mysql"

DBS="$($MYSQL -u$MUSER -p$MPWD -Bse 'show databases')"
for db in $DBS; do

if [[ "$db" =~ "^${DB_STARTS_WITH}" ]]; then
    echo "Deleting $db"
    $MYSQL -u$MUSER -p$MPWD -Bse "drop database $db"
fi

done
Run Code Online (Sandbox Code Playgroud)

当然使用该drop部件需要您自担风险;)

  • SHOW DATABASES LIKE'前缀%'; 更可靠 (2认同)