MYSQL仅转储某些行


96

我正在尝试在数据库中进行几行的mysql转储。然后,我可以使用转储将那几行上载到另一个数据库中。我拥有的代码正在运行,但是它会转储所有内容。我怎样才能使mysqldump只转储表的某些行?

这是我的代码:


mysqldump --opt --user=username --password=password lmhprogram myResumes  --where=date_pulled='2011-05-23' > test.sql

Answers:


142

只需解决您的--where选择。它应该是有效的SQL WHERE子句,例如:

--where="date_pulled='2011-05-23'"

您将列名放在引号之外。


1
谢谢,正是我所需要的。感谢您的帮助!
沙塔克

@AJ,好信息!谢谢!
罗曼·纽瓦萨

2
对于IN条件,我们可以简单地使用--where="id IN(1,2,6,10)"。其中id是表中的列。参考--where
Yogesh

9
只是给像我这样的人的注释,使用它将大数据转储通过管道传递到中间中断的另一台服务器,如果不--no-create-info与where子句一起指定,则新的转储将重新创建表并删除已传输的数据!可能很明显,但它现在吸引了我两次。
georgiecasey

请注意,问题不在于列名不在引号内。这是一个shell命令,因此您需要为string编写shell语法date_pulled='2011-05-23'。这意味着您需要引用或转义单引号字符,因此它们包含在字符串中,而不是在shell语法中被解释为引号。在整个事情上加上双引号可以做到这一点,但是--where=date_pulled="'2011-05-23'"(或者--where=date_pulled=\'2011-05-23\',甚至--where=date_pulled"'"2011-05-23"'")也可以。

32

您需要引用“ where”子句。

尝试

mysqldump --opt --user=username --password=password lmhprogram myResumes  --where="date_pulled='2011-05-23'" > test.sql

1
那正是我所需要的。另一个人在您之前回答,我选择了他的答案,但我支持您。
沙塔克

1
使用查询的另一种方式是:CREATE TABLE new_table AS(SELECT * FROM myResumes WHERE where = date_pulled ='2011-05-23'); 然后,您可以简单地通过mysqldump导出该表。
Vinayagam,2015年

1

使用LIKE条件,将此代码用于特定的表行。

mysqldump -u root -p sel_db_server case_today --where="date_created LIKE '%2018
%'" > few_rows_dump.sql
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.