基于模式在mysqldump中跳过表

时间:2014-08-20 07:04:23

标签: mysql mysqldump

有没有办法从mysqldump命令限制某些表(即以名称'test'开头)?

mysqldump -u username -p database \
  --ignore-table=database.table1  \
  --ignore-table=database.table2 etc > database.sql

但问题是,大约有20个名称以'test'开头的表。有没有办法跳过这些表(不使用像“--ignore-table=database.table1 --ignore-table=database.table2 --ignore-table=database.table3 .... --ignore-table=database.table20”这样的长命令?

有没有办法只转储架构但没有数据?

1 个答案:

答案 0 :(得分:9)

不幸的是mysqldump要求表名完全限定,因此您不能将参数指定为正则表达式模式。

但是,您可以使用脚本生成mysqldump,方法是将其连接到information_schema并使用以下内容列出所有表:

SELECT TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA NOT IN ('INFORMATION_SCHEMA', 'mysql', 'PERFORMANCE_SCHEMA');

然后让它为与^test的正则表达式匹配的所有表名生成--ignore-table个参数。

要仅转储架构而没有数据,您可以使用--no-data=true作为参数。

如果要获取所有非测试表的所有内容,但只获取另一个表的模式,则需要使用两个单独的mysqldump命令(一个用于所有测试表的ignore-table,另外一个模式只有一个,另一个仅针对仅架构表的架构),第二个使用>> append operator附加到输出文件。

因此,您生成的脚本可能会生成类似的内容:

mysqldump -u root -p toor databaseName --ignore-table=testTable1 --ignore-table=testTable2 --ignore-table=testTable3  --ignore-table=schemaOnlyTable > mysqldump.sql

mysqldump -u root -p toor databaseName schemaOnlyTable --no-data=true >> mysqldump.sql