问答中心分类: MYSQLMySQL 通过查询转储
0
匿名用户 提问 1天 前

有没有可能做mysqldump单人SQL query?
我的意思是转储所有的数据库,比如phpmyadmin当你导出到SQL

11 Answers
0
Thomas Ahle 回答 1天 前

这应该工作

mysqldump --databases X --tables Y --where="1 limit 1000000"
ijw 回复 1天 前

一个更好的例子可能是实际上看起来像 where 子句的东西,例如 –where=”myColumn < 1000″ – 每个表的前一百万行似乎是一个奇怪的请求;)

Thomas Ahle 回复 1天 前

@ijw如果您要做的是对表进行轻松可重新插入的备份,那么除了限制之外,您可能不需要 where 子句。

Lightness Races in Orbit 回复 1天 前

@Sagotharan:嗯,这不是一个查询。这大概就是为什么。

Tamlyn 回复 1天 前

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

Gary 回复 1天 前

是的,为了不要删除表中的所有数据从保存的数据文件恢复时,请确保添加--no-create-info选项。看我的答案例如。

0
Gary 回答 1天 前

使用 where 查询转储表:

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

转储整个表:

mysqldump mydatabase mytable > data.sql

笔记:

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

这正是我一直在寻找的。这个答案应该更高。

stamster 回复 1天 前

当我只需要转储某些数据时,这就是我一直用于这种用例的方法 – 所以它非常方便。

0
Guy 回答 1天 前

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

SELECT * from myTable
INTO OUTFILE '/tmp/querydump.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
SIFE 回复 1天 前

如果我想转储多个表怎么办。

dknight 回复 1天 前

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

Techlord 回复 1天 前

它在哪里保存文件?

Luke 回复 1天 前

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

mikep 回复 1天 前

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

0
Wagner Bianchi 回答 1天 前

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

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

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

0
aullah 回答 1天 前

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

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

上面将最后 100 条记录保存到 export_file.sql 中,假设您要从中导出的表具有自动递增的 id 列。
您将需要更改用户、本地主机、数据库和表值。您可以选择更改 id 列和导出文件名。