如何用mysqldump只转储数据而不转储任何表的信息?
回答 9
浏览 34.9万
2011-02-24
我正在寻找转储我的mysql数据库中所有数据的语法。我不想要任何表的信息。
https://dev.mysql.com/doc/refman/5.7/en/mysqldump-definition-data-dumps.html
- Stack Underflow 2019-12-19
9 个回答
#1楼
已采纳
得票数 655
mysqldump --no-create-info ...
此外,您还可以使用。
--skip-triggers
: 如果你使用触发器--no-create-db
: 如果你使用--databases ...
选项--compact
: 如果你想去掉多余的评论
以下是复制粘贴者的完整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-transaction
。
- Rolf 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]
之间没有空格
在使用
--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
谢谢你的
--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
两次使用'-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
#6楼
得票数 2
我建议使用下面的片段。即使在巨大的表格中也能正常工作(否则你会在编辑器中打开转储,并剥离不需要的东西,对吗?)
mysqldump --no-create-info --skip-triggers --extended-insert --lock-tables --quick DB TABLE > dump.sql
至少需要mysql 5.x,但现在谁还会运行老的东西呢...:)
最近我遇到了一个情况,我不得不连接到一个在生产中使用4.x的系统。他们在表和列名中都有空格,在我看来,他们基本上做错了一切。
- Elkvis 2018-04-26
#7楼
得票数 0
只需将数据转储为delimited-text格式即可。
#8楼
得票数 0
尝试转储到一个带分隔符的文件。
mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\" --fields-terminated-by=,
#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