Answers:
有一个更简单的使用mysqldump的bash一线式(来自Thingy Ma Jig Blog)。
mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
如果出现此错误:
ERROR 1217 (23000) at line 1: Cannot delete or update a parent row:
a foreign key constraint fails
请尝试以下操作:
(echo 'SET foreign_key_checks = 0;';
(mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] |
grep ^DROP);
echo 'SET foreign_key_checks = 1;') | \
mysql -u[USERNAME] -p[PASSWORD] -b [DATABASE]
现在,它忽略了约束。
您应该使用information_schema表来获取有关数据库的元数据,然后删除那里列出的表。
您也可以尝试使用快速Shell脚本来执行此操作:
#!/bin/bash
IFS=$'\n'
for table in `mysql <databaseName> -N -e 'show tables'`; do
echo mysql <databaseName> -e "drop table $table"
done
echo
在检查完将要执行的操作后,将其删除。
$''
使bash解释反斜杠序列,而不是直接使用它们。 '\n'
恰好包含\ n,就像这样,$IFS
它将理解为拆分为\和n个字符。 $'\n'
将包含换行符0x0D。在这里查看更多信息:gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting。
有一个在Xaprb博客条目最近这很好地涵盖了这一点。
它包括为什么使用INFORMATION_SCHEMA
并非总是一件好事,并引用了Maatkit那些可爱的人的工具。
尝试以下方法mk-find
:
mk-find '<database>' --printf 'DROP TABLE %D.%N'
如果您对结果满意,则:
mk-find '<database>' --exec 'DROP TABLE %D.%N'
如果您具有文件系统访问权限,则只需rm -rf databasename/*
:)。
Drop数据库语句执行相同的操作... MySQL手册摘录:
DROP DATABASE语句从给定的数据库目录中删除MySQL本身在正常操作期间可能创建的那些文件和目录: