如何用mysqldump只转储数据而不转储任何表的信息?

回答 9 浏览 34.9万 2011-02-24

我正在寻找转储我的mysql数据库中所有数据的语法。我不想要任何表的信息。

Lizard 提问于2011-02-24
9 个回答
#1楼 已采纳
得票数 655
mysqldump --no-create-info ...

此外,您还可以使用。

  • --skip-triggers: 如果你使用触发器
  • --no-create-db: 如果你使用--databases ... 选项
  • --compact: 如果你想去掉多余的评论
matei 提问于2011-02-24
aasmpro 修改于2020-05-18
以下是复制粘贴者的完整cmd mysqldump -u USERNAME -h HOST --no-create-info --skip-triggers YOURDATABASENAME YOURTABLENAME --where='id=12345678'Yzmir Ramirez 2014-09-22
如果你得到了Access denied for user ... to database '...' when doing LOCK TABLES,就用--single-transactionRolf 2016-02-05
@YzmirRamirez 谢谢,但在WINDOWS上我不得不对--where使用双引号。例如,--where="id=2"Kip 2017-02-20
这对我来说是一个出色的救星。谢谢。Ken Ingram 2019-10-04
#2楼
得票数 184

这应该是可行的。

# To export to file (data only)
mysqldump -u [user] -p[pass] --no-create-info mydb > mydb.sql

# To export to file (structure only)
mysqldump -u [user] -p[pass] --no-data mydb > mydb.sql

# To import to database
mysql -u [user] -p[pass] mydb < mydb.sql

注意:-p & [pass]之间没有空格

Ish 提问于2011-02-24
keiththomps 修改于2016-05-20
在使用--no-create-info的时候,--no-create-db是多余的。James McMahon 2012-06-13
-p后面有一个空格就可以了。Mulan 2014-03-14
一般来说,最好只使用-p而不提供密码,这样密码就不会保存在你的bash历史记录中(在你运行该命令后,会提示你输入密码)。Dan 2015-08-06
除了@Dan的建议外,它还使密码对任何能列出当前进程的用户都是可见的(ps -ef)TMG 2015-08-08
-p选项后省略密码,使mysqldump提示密码。Melle 2017-06-09
#3楼
得票数 24

如果你只想要INSERT查询,请使用下面的方法。

mysqldump --skip-triggers --compact --no-create-info

Jonathan 提问于2017-10-05
谢谢你的--compact,它摆脱了多余的注释语句。chiliNUT 2020-03-13
#4楼
得票数 23
 >> man -k  mysqldump [enter in the terminal]

你会发现下面的解释

--no-create-info, -t

不要写重新创建每个转储表的CREATE TABLE语句。 注意 这个选项并不从mysqldump输出中排除创建日志文件组或表空间的语句;但是,你可以为此目的使用--no-tablespaces选项。

--no-data, -d

不要写任何表行信息(也就是说,不要转储表的内容)。如果你只想转储表的CREATE TABLE语句,这是很有用的(例如,通过加载转储文件来创建一个表的空拷贝)。

# To export to file (data only)
mysqldump -t -u [user] -p[pass] -t mydb > mydb_data.sql

# To export to file (structure only)
mysqldump -d -u [user] -p[pass] -d mydb > mydb_structure.sql
Angelin Nadar 提问于2014-05-29
Angelin Nadar 修改于2015-10-05
两次使用'-t'和'-d'选项是否有什么原因?erwan 2018-02-05
#5楼
得票数 3

最好转储到一个压缩文件中

mysqldump --no-create-info -u username -hhostname -p dbname | gzip > /backupsql.gz

并使用 pv apt-get install pv 进行恢复以监控进度

pv backupsql.gz | gunzip | mysql -uusername -hhostip -p dbname

mikoop 提问于2020-10-27
#6楼
得票数 2

我建议使用下面的片段。即使在巨大的表格中也能正常工作(否则你会在编辑器中打开转储,并剥离不需要的东西,对吗?)

mysqldump --no-create-info --skip-triggers --extended-insert --lock-tables --quick DB TABLE > dump.sql

至少需要mysql 5.x,但现在谁还会运行老的东西呢...:)

wuzer 提问于2014-05-15
最近我遇到了一个情况,我不得不连接到一个在生产中使用4.x的系统。他们在表和列名中都有空格,在我看来,他们基本上做错了一切。Elkvis 2018-04-26
#7楼
得票数 0

只需将数据转储为delimited-text格式即可。

Frank Heikens 提问于2011-02-24
#8楼
得票数 0

尝试转储到一个带分隔符的文件。

mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\" --fields-terminated-by=,
ed209 提问于2011-02-24
#9楼
得票数 0

当我试图使用已接受的答案导出数据时,我得到了一个错误。

ERROR 1235 (42000) at line 3367: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

如上所述,我们的目标是要让更多的人受益。

mysqldump --no-create-info

会导出数据,但也会导出创建触发器的语句。如果你像我一样用一条命令输出数据库结构(其中也包括触发器),然后用上述命令获取数据,你还应该使用'--skip-triggers'。

因此,如果你想要的只是数据,那么你就必须要有足够的时间。

mysqldump --no-create-info --skip-triggers
Ben Waine 提问于2013-11-18
标签