有没有办法从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
”这样的长命令?
有没有办法只转储架构但没有数据?
答案 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