一尘不染

Mysqldump仅具有某些前缀的表/ Mysqldump通配符?

mysql

我有正在清理的庞大,混乱的数据库。它可以容纳500多个表,这是将Magento Enterprise和Joomla合并到一个数据库中的结果。

更糟糕的是,有一组70多个Joomla表完全没有使用。这些都以开头bak_

仅删除这些bak_表将很容易,但是我想先将其“ bak”起来(看看我在那里做了什么?)。在我的脑海中,我可以想象这样的命令:

mysqldump -u username -p mydatabase bak_*

但这是行不通的。最好的方法是什么?谢谢!

编辑:是的,我可以明确列出要包括的70个表,或要排除的〜430个表,但我正在寻找一种更好的方法,如果可能的话。


阅读 632

收藏
2020-05-17

共1个答案

一尘不染

您可以在命令行上一个接一个地指定表名,但不能使用通配符。 mysqldump databasename table1 table2 table3

您也可以使用--ignore-table更短的时间。

另一个想法是将表放入文件中,例如

mysql -N information_schema -e "select table_name from tables where table_schema = 'databasename' and table_name like 'bak_%'" > tables.txt

编辑文件并将所有数据库放在一行上。然后做

mysqldump dbname `cat tables.txt` > dump_file.sql

要将表格放在一行中(不推荐),您可以执行以下操作

mysql -NB  information_schema -e "select table_name from tables where table_name like 'bak_%'" | xargs -I"{}" mysql dbname -e "DROP TABLE {}"
2020-05-17