删除MySQL中的所有数据库

Suk*_*ngh 10 mysql

我们的MySQL中有很多数据库,我们想缩小/清除MySQL中的ibdata1文件.

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

Suk*_*ngh 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>
Run Code Online (Sandbox Code Playgroud)

感谢Mohinish的博客文章

  • 如果您有像"yyk2_db"这样的数据库名称,则单行将失败.这种情况只需用"$ 1"替换"$ 1" (3认同)

Fab*_*cke 12

您可以直接使用 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');
Run Code Online (Sandbox Code Playgroud)

然后执行生成的字符串。

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

  • 看起来这个失败是因为数据库名称有破折号“-”,因此可能需要反引号,例如`CONCAT('DROP DATABASE \`', table_schema, '\`;')` (3认同)