我想删除所有以单词开头的数据库.
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)
然后复制并粘贴生成的记录集并运行
小智 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添加到尾部.)
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部件需要您自担风险;)