MySQL通过查询转储

Jak*_*old 212 mysql sql database

有可能mysqldump单身SQL query吗?

我的意思是转储整个数据库,就像phpmyadmin导出到的那样SQL

Zak*_*Zak 272

不是mysqldump,而是mysql cli ......

mysql -e "select * from myTable" -u myuser -pxxxxxxxxx mydatabase
Run Code Online (Sandbox Code Playgroud)

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

mysql -e "select * from myTable" -u myuser -pxxxxxxxx mydatabase > mydumpfile.txt
Run Code Online (Sandbox Code Playgroud)

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

mysqldump --tables myTable --where="id < 1000"
Run Code Online (Sandbox Code Playgroud)

  • 如果我想要一种允许重新插入的格式怎么办? (51认同)
  • 如何恢复这个转储的txt文件? (21认同)
  • 您可以为查询创建一个新表(CREATE TABLE SELECT),然后使用mysqldump转储该表.这样你就可以在以后轻松恢复它. (13认同)
  • 对于那些尝试mysql -e方法的人.我不得不自定义脚本以便为我工作.这个要求您在运行时输入sql密码.mysql -e"select*from table WHERE query ='asdasd'" - u root -p --database = DBNAME> text.txt (3认同)
  • 要导入使用-B选项以mysql -e导出的数据以制表符分隔的格式输出,请运行mysqlimport --ignore-lines = 1 --fields-terminated-by ='\ t'。参见:http://stackoverflow.com/a/17071108/1676044 (2认同)

Tho*_*hle 248

这应该工作

mysqldump --databases X --tables Y --where="1 limit 1000000"
Run Code Online (Sandbox Code Playgroud)

  • !!警告!!mysqldump在导出文件的顶部添加"DROP TABLE"命令.这意味着如果你进行部分导出然后重新导入它,你将失去其他一切.好吧,我做到了. (74认同)
  • 是的,为了在从保存的数据文件恢复时**不删除表中的所有数据,请确保添加`--no-create-info`选项.有关示例,请参阅[我的回答](http://stackoverflow.com/a/15058427/1054260). (32认同)
  • 一个更好的例子可能是实际上看起来像where子句的东西,例如--where ="myColumn <1000" - 每个表的第一百万行似乎是一个奇怪的要求;) (4认同)
  • @Sagotharan:嗯,这不是一个查询.这可能就是原因. (3认同)

小智 67

您可以将查询转储为csv,如下所示:

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Run Code Online (Sandbox Code Playgroud)

  • 这将在运行MySQL数据库的计算机上创建一个文件.因此,如果您从远程控制台查询,此方法将失败.如果有办法从远程控制台进行操作,请告诉我. (10认同)
  • 如果我想转储多个表怎么办? (7认同)
  • 它在哪里保存文件? (2认同)

Gar*_*ary 60

使用where查询转储表:

mysqldump mydatabase mytable --where="mycolumn = myvalue" --no-create-info > data.sql
Run Code Online (Sandbox Code Playgroud)

转储整个表格:

mysqldump mydatabase mytable > data.sql
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 用您想要的值替换mydatabase,mytable和where语句.
  • 默认情况下,mysqldump将在其输出中包含DROP TABLECREATE TABLE语句.因此,如果您希望从保存的数据文件恢复时不删除表中的所有数据,请确保使用该--no-create-info选项.
  • 您可能需要在上面的示例命令中添加适当的-h,-u-p选项,以便分别指定所需的数据库主机,用户和密码.

  • 这正是我一直在寻找的。这个答案应该比较高。 (2认同)

小智 38

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

mysqldump -u root -p test t1 --where="1=1 limit 100" > arquivo.sql
Run Code Online (Sandbox Code Playgroud)

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

干杯,WB


MPe*_*ier 8

MySQL Workbench 在 GUI 中也有这个功能。只需运行查询,单击导出/导入旁边的保存图标:

在此处输入图片说明

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

在此处输入图片说明

输入名称,单击保存,确认表名称,您将拥有转储文件。


AUl*_*ah1 5

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

mysqldump -u user -p -h localhost --where "1=1 ORDER BY id DESC LIMIT 100" database table > export_file.sql
Run Code Online (Sandbox Code Playgroud)

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

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