删除MySQL中的所有数据库
我们的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 `"
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;”