删除MySQL中的所有数据库

删除MySQL中的所有数据库,mysql,Mysql,我们的MySQL中有许多数据库,我们希望这样做 除了information\u schema和mysqld 数据库?以下命令删除mysql dbms中除mysql、信息模式和性能模式dbs之外的所有数据库 mysql -uroot -p<password> -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema| gawk '{print "drop database `"

我们的MySQL中有许多数据库,我们希望这样做

除了
information\u schema
mysqld

数据库?

以下命令删除mysql dbms中除mysql、信息模式和性能模式dbs之外的所有数据库

mysql -uroot -p<password> -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema| gawk '{print "drop database `" $1 "`;select sleep(0.1);"}' | mysql -uroot -p<password>
mysql-uroot-p-e“show databases”| grep-v Database | grep-vmysql | grep-v information | u schema | gawk'{print“drop Database”`“$1”`;选择sleep(0.1);“}”| mysql-uroot-p
感谢Mohinish的博客

关注这一点-它演示了如何做到这一点

使用的票据为:

mysql -uroot -p -e "show databases" | grep -v Database |
grep -v mysql| grep -v information_schema| grep -v test |
grep -v OLD |gawk '{print "drop database " $1 ";select sleep(0.1);"}' |
mysql -uroot -ppassword

如果您有跨数据库外键,或者数据库名称使用MySQL保留字,例如“order”,那么Sukhjinder Singh的答案的这种变体将起作用


mysql-u-p-e“show databases”| grep-v Database | grep-v mysql | grep-v information | u schema | gawk'{print“SET FOREIGN_KEY_CHECKS=0;drop Database
“$1”
;选择sleep(0.1);“}”| mysql-u-p

您可以直接使用mysql构建一系列drop数据库查询:

-- Prevent truncation
SET SESSION group_concat_max_len = 1000000;

SELECT GROUP_CONCAT(
  DISTINCT CONCAT('DROP DATABASE ', table_schema, ';')
  SEPARATOR ''
)
FROM information_schema.tables
WHERE table_schema NOT IN ('mysql', 'information_schema');
然后执行结果字符串


此解决方案的优点是不需要连接到为MySQL数据库提供服务的主机。

这两种方法都会删除所有数据库,除了
MySQL
information\u schema
performance\u schema

方法1。MYSQL方法 灵感来源于,但重量较轻,可捕获空数据库。这种方法通过MYSQL查询生成脚本,然后将其反馈给MYSQL。就bash而言,此方法可能是最兼容的

mysql -uroot -pMY_PASSWORD -s -N -e "SELECT GROUP_CONCAT(CONCAT('DROP DATABASE ', schema_name, ';') SEPARATOR ' ') FROM information_schema.schemata WHERE schema_name NOT IN ('mysql', 'information_schema', 'performance_schema');" | grep -v "NULL" | mysql -uroot -pMY_PASSWORD
更新
添加了-v“NULL”
以避免在没有表的情况下出现MYSQL错误


方法2。Bash方法 灵感来源于,但为了更好的兼容性进行了调整。这种方法以原始格式请求数据库名称,执行bash魔术,然后将代码反馈回MYSQL。此方法使您能够更好地控制代码

mysql -uroot -pMY_PASSWORD -e "show databases" -s -N | egrep -v "mysql|information_schema|performance_schema" | while read x ; do echo "DROP DATABASE $x;" ; done| tr '\n' ' ' | mysql -h"mysql" -uroot -pMY_PASSWORD

在脚本的中间有2个管道,但是,在删除一个或更短的时候,它工作:MySQL -UROOT -P -E“显示数据库”EEGRIP-V“数据库mymySQL信息模式”GWK“{打印”丢弃数据库“1”;选择休眠(0.1);“}”MySQL -URON-P -JONJG12 1小时,如果你的数据库名像“YYK2YDB”。一艘班轮将会失败。如果是这种情况,只需将“$1”替换为“$1”`我喜欢这个bc,另一个答案使用的是我没有安装的gawk。但是,对于名称中带有破折号的dbs,此操作失败,因此,我不得不将其修改为使用
“DROP DATABASE\`x\`;”
,而不是
“DROP DATABASE$x;”