我试图转储我们数据库中所有表的结构,然后只转储我特别想要的那些数据,但我似乎做错了什么,因为我没有为创建的空表我从数据转储中排除的那些。
我有一个文本文件,它指定了我要为哪些表转储数据(称为 showtables.txt):
SHOW TABLES FROM mydb
WHERE Tables_in_mydb NOT LIKE '%_history'
AND Tables_in_mydb NOT LIKE '%_log';
然后我执行这个命令来转储所有表的结构,然后在文本文件中转储该查询返回的表的数据:
mysqldump -u root -pmypassword mydb --no-data > mydump.sql; mysql -u root -pmypassword < showtables.txt -N | xargs mysqldump mydb -u root -pmypassword > mydump.sql -v
我得到了 showtables 查询结果中包含的所有表的转储,但我没有得到其余表的结构。
如果我只将结构部分作为单个命令运行,则效果很好,我会为所有表转储结构。但是将它与数据转储结合起来似乎不起作用。
你能指出我哪里出了问题吗?
谢谢。
最佳答案
我认为你的命令行参数顺序错误(重定向到文件应该是结束),你需要一个额外的参数给 xargs
这样我们就可以指定数据库名称到 mysqldump。
此外,您需要附加 >>>
转储数据,否则您将覆盖每个表的 mydump.sql 文件:
mysqldump -u root -pmypassword mydb --no-data > mydump.sql
mysql -u root -pmypassword -N < showtables.txt | xargs -I {} mysqldump -v -u root -pmypassword mydb {} >> mydump.sql
来源:http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/
关于MySQL dump所有表的结构和部分数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21135407/