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

tha*_*smt 70 mysql mysqldump

我有一个庞大,凌乱的数据库,我正在清理.它包含500多个表,这是将Magento Enterprise与Joomla合并在一个数据库中的结果.

更糟糕的是,有一组70多个Joomla表根本没有使用.这些都是前缀bak_.

只是删除这些bak_表格很容易,但我想先把它们'b''起来(看看我在那里做了什么?).在我看来,我可以想象一个这样的命令:

mysqldump -u username -p mydatabase bak_*
Run Code Online (Sandbox Code Playgroud)

但这不起作用.最好的方法是什么?谢谢!

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

sre*_*mer 104

您可以在命令行上依次指定表名,但不使用通配符. 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 
Run Code Online (Sandbox Code Playgroud)

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

mysqldump dbname `cat tables.txt` > dump_file.sql
Run Code Online (Sandbox Code Playgroud)

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

mysql -NB  information_schema -e "select table_name from tables where table_name like 'bak_%'" | xargs -I"{}" mysql dbname -e "DROP TABLE {}"
Run Code Online (Sandbox Code Playgroud)

  • 但不管怎样,我必须列出70个要忽略的表,或者要包含的430个表.这是我试图避免做的事情.在我的问题中我应该更清楚,但感谢答案.这是WOULD的工作,是的;) (4认同)
  • 这样做`mysql -NB information_schema -e"从table_name中选择table_name,其中table_name就像'bak_%'" xargs -I"{}"mysql test -e"DROP TABLE {}"` (3认同)

min*_*naz 56

这是一个简单的方法:

mysql [dbname] -u [username] -p[password] -N -e 'show tables like "bak\_%"' | xargs mysqldump [dbname] -u [username] -p[password] > [dump_file]
Run Code Online (Sandbox Code Playgroud)

  • 你可以将-N传递给`mysql`,你不需要运行`grep`来过滤掉`Tables_in`行. (4认同)
  • 它应该是`show tables like"<prefix>\_%"`因为`_`也是一个通配符,应该被转义...否则你可能会遇到像bak_和bak2_这样具有相同前缀前缀的表的问题两者都匹配`bak_%` (3认同)

Ste*_*ris 50

我的最爱:

mysqldump DBNAME $(mysql -D DBNAME -Bse "show tables like 'wp\_%'") > FILENAME.sql
Run Code Online (Sandbox Code Playgroud)

所有答案都采用几乎相同的方法,但这是最简洁的语法.

  • 对于那些好奇的人来说,这些标志是-B batch -e execute -s silent mode(less less)http://dev.mysql.com/doc/refman/5.6/en/mysql-command-options.html (8认同)

tno*_*sso 5

这对我来说工作

mysqldump -u USER -p DATABASE $(mysql -u USER -p -D DATABASE -Bse "show tables like 'PREFIX%'") > /tmp/DATABASE.sql
Run Code Online (Sandbox Code Playgroud)