MySQL所有表的转储结构和一些数据

CMR*_*CMR 5 mysql sql mysqldump command-line-interface

我试图转储我们数据库中所有表的结构,然后只转储我特别想要的那些数据,但我似乎做错了什么,因为我没有得到为我创建的空表从数据转储中排除。

我有一个文本文件,它指定要转储数据的表(称为 showtables.txt):

SHOW TABLES FROM mydb
WHERE Tables_in_mydb NOT LIKE '%_history'
AND Tables_in_mydb NOT LIKE '%_log';
Run Code Online (Sandbox Code Playgroud)

然后我执行这个命令来转储所有表的结构,然后在文本文件中由该查询返回的表的数据:

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
Run Code Online (Sandbox Code Playgroud)

我正在获取 showtables 查询结果中包含的所有表的转储,但我没有获取其余表的结构。

如果我只将结构部分作为单个命令运行,那效果很好,我会为所有表转储结构。但是将它与数据转储结合起来似乎不起作用。

你能指出我哪里出错了吗?

谢谢。

Jon*_*Jon 5

我认为你的命令行参数的顺序错误(重定向到文件应该是结尾),并且你需要一个额外的参数,以便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
Run Code Online (Sandbox Code Playgroud)

资料来源:http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/