通过查询转储MySQL


Answers:


285

不是mysqldump,而是mysql cli ...

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase

您可以根据需要将其重定向到文件中:

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt

更新:原始帖子询问他是否可以通过查询从数据库中转储。他问的和他的意思是不同的。他真的只想对所有表进行mysqldump。

mysqldump --tables myTable --where="id < 1000"

22
如何还原此转储的txt文件?
Vivek S

3
对于那些尝试mysql -e方法的人。我必须自定义脚本才能为我工作。这需要您在运行时输入sql密码。MySQL的-e “从表中选择*,其中查询= 'asdasd'” -u根-p --database = DBNAME>的text.txt
RichardW11

13
您可以为查询创建一个新表(CREATE TABLE SELECT),然后使用mysqldump转储该表。这样一来,您以后就可以轻松还原它。
quano

1
对于谁想使用mysqldump并还原文件,请看这里:stackoverflow.com/a/2431936/411786
Syco

2
要导入使用-B选项以mysql -e导出的数据以制表符分隔的格式输出,请运行mysqlimport --ignore-lines = 1 --fields-terminated-by ='\ t'。请参阅:stackoverflow.com/a/17071108/1676044
Kevin Borders 2014年

259

这应该工作

mysqldump --databases X --tables Y --where="1 limit 1000000"

4
一个更好的示例可能是实际上看起来像where子句的东西,例如--where =“ myColumn <1000”-每个表的前一百万行似乎是一件很奇怪的要求;)
ijw 2011年

@ijw如果要执行的操作是对表进行易于重新插入的备份,则除限制之外,您可能不需要where子句。
Thomas Ahle

3
@Sagotharan:嗯,这不是查询。那可能就是原因。
Lightness Races in Orbit

79
!!警告!!mysqldump在导出文件的顶部添加一个“ DROP TABLE”命令。这意味着,如果您执行部分导出然后重新导入,则将丢失所有其他内容。好吧,我做到了。
Tamlyn 2012年

34
是的,为了从保存的数据文件还原时不删除表中的所有数据,请确保添加--no-create-info选项。请参阅我的答案作为示例。
加里

71

您可以像这样将查询转储为csv:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

8
如果我要转储多个表怎么办。
SIFE

10
这将在运行MySQL数据库的计算机上创建一个文件。因此,如果从远程控制台查询,则此方法将失败。如果还有从远程控制台执行此操作的方法,请告诉我。
dknight

2
它在哪里保存文件?
Techlord

1
@dknight我假设您的意思是通过终端控制台的远程控制台,在这种情况下,可以scp在连接终止后通过检索转储的文件。这是一个例子。 scp user@remote-server.com:/tmp/querydump.csv ~/local.csv
路加福音

似乎是不安全的:#1290-MySQL服务器正在使用--secure-file-priv选项运行,因此它无法执行此语句
mikep

64

使用where查询转储表:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql

转储整个表:

mysqldump mydatabase mytable > data.sql

笔记:

  • mydatabasemytable和语句替换为所需的值。
  • 默认情况下,mysqldump将在输出中包含DROP TABLECREATE TABLE语句。因此,如果您不想删除表中的所有数据从保存的数据文件还原时确保使用--no-create-info选项。
  • 您可能需要在上述示例命令中添加相应的-h-u-p选项,以便分别指定所需的数据库主机,用户和密码。

38

您可以在mysqldump上使用--where选项来生成您正在等待的输出:

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql

来自test.t1的最多100行将从数据库表中转储。

WB,干杯


6

如果要将最后n条记录导出到一个文件中,可以运行以下命令:

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql

上面假设将要导出的表具有自动递增的id列,会将最后100条记录保存到export_file.sql中。

您将需要更改用户,本地主机,数据库和表的值。您可以选择更改id列并导出文件名。


5

MySQL Workbench在GUI中也巧妙地具有此功能。只需运行查询,然后单击“导出/导入”旁边的保存图标:

在此处输入图片说明

然后在列表中选择“ SQL INSERT语句(* .sql)”。

在此处输入图片说明

输入名称,单击“保存”,确认表名称,您将获得转储文件。


3

结合上面的内容,这是我真正的实际示例,同时基于计价器和时间戳选择记录。我已经需要这个命令多年了。执行速度非常快。

mysqldump -uuser -ppassword main_dbo trHourly --where="MeterID =5406 AND TIMESTAMP<'2014-10-13 05:00:00'" --no-create-info --skip-extended-insert | grep  '^INSERT' > 5406.sql

-1

mysql导出查询结果命令行:

mysql -h120.26.133.63 -umiyadb -proot123 miya -e "select * from user where id=1" > mydumpfile.txt

它在ubuntu中为我工作,命令:mysql -h localhost -u root -p dbname -e“从id = 1的用户中选择*;从id = 1的人员中选择*” --xml> / var / www / html / project / backups / db.xml
Ramesh
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.