删除MySQL中的所有数据库

时间:2014-03-10 13:34:20

标签: mysql

我们的MySQL中有很多数据库,我们希望shrink/purge ibdata1 file in MySQL

除了information_schemamysqld之外,我们如何从MySQL中删除所有数据库 数据库?

5 个答案:

答案 0 :(得分:19)

以下命令将删除除mysql,information_schema和performance_schema dbs之外的mysql dbms中的所有数据库。

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>

感谢Mohinish的博客post

答案 1 :(得分:3)

您可以直接使用MySQL建立一系列DROP DATABASE查询:

-- 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数据库的主机。

答案 2 :(得分:1)

如果您有跨数据库外键或使用MySQL保留字的数据库名称,例如'order',那么Sukhjinder Singh的答案将会有效。

mysql -u<user> -p<password> -e "show databases" | grep -v Database | grep -v mysql | grep -v information_schema | gawk '{print "SET FOREIGN_KEY_CHECKS = 0;drop database“$ 1”;select sleep(0.1);"}' | mysql -u<user> -p<password>

答案 3 :(得分:1)

这两种方法都会删除所有数据库,除了 mysqlinformation_schemaperformance_schema

方法 1. MYSQL 方法

Fabian's answer 的启发,但更轻巧并捕获空数据库。这种方法通过 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

更新。 added -v "NULL" 以避免在没有表的情况下出现 MYSQL 错误。


方法 2. Bash 方法

Sukhjinder's answer 的启发,但经过调整以获得更好的兼容性。这种方法以原始格式请求数据库名称,执行其 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

答案 4 :(得分:0)

遵循此link - 它演示了如何执行此操作!

使用过的脚本是:

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