用管道将Gunzip和mysql用Gunzip压缩转储并将其导入


27

我有一个.gz sql转储文件(例如:foo.sql.gz),我想使用经典的mysql命令将其导入数据库中。

gunzip -c foo.sql.gz > foo.sql

mysql -uroot -ppassword foo < foo.sql

foo是数据库。

如何将这两个命令整合到一个命令中?

试过了

gunzip -c foo.sql.gz | mysql -uroot -ppassword foo

但似乎不起作用;我得到gzip: stdout: Broken pipe


6
仅供参考,您真的不想在命令行上传递mysql密码。这导致它被存储在〜/ .bash_history中,以供所有人查看。如果您只输入-p,则会提示您输入密码,这更安全(并且也不会破坏zcat管道)
thefreeman 2013年

1
如果gunzip <foo.sql.gz | | | | | | | | | | | | | | | | | | |,| ,,,,,,,,,,,,,,,,。mysql -uroot -ppassword foo
Yada

Answers:


40
zcat foo.sql.gz | mysql -uroot -ppassword foo

这也将保持foo.sql.gz原样。


1
在速度方面,这比gunzip && mysql -e“ use unzipped.sql”慢得多。
podarok '16

13

对于Max OSX上的程序,存在一个bugzcat因此您需要gzcat改用。

gzcat foo.sql.gz | mysql -uroot -ppassword foo

2

所有其他答案均建议您在命令中写入密码。这是非常糟糕的做法,并带来安全风险。请不要那样做。

您可以在命令中将密码保留为空,这将要求您以交互方式输入密码。这样,密码不会保存在bash历史记录中。

gunzip < dump.sql.gz | mysql -u username -p databasename
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.